2011-10-03 20 views
9

Tôi có một mp3 trên máy chủ của tôi (url chỉ là ví dụ):làm thế nào để bạn hỗ trợ tìm kiếm một mp3 khi trở về từ một kịch bản php?

http://www.my-server.com/myaudio.mp3 

Tôi có một kịch bản php trên máy chủ tại địa chỉ:

http://www.my-server.com/testmp3.php 

nào chứa đoạn mã sau (mà tôi đã here):

<? 
$file = "myaudio.mp3"; 

if (file_exists($file)) { 
    header('Content-Description: File Transfer'); 
    header('Content-Type: application/octet-stream'); 
    header('Content-Disposition: attachment; filename='.basename($file)); 
    header('Content-Transfer-Encoding: binary'); 
    header('Expires: 0'); 
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); 
    header('Pragma: public'); 
    header('Content-Length: ' . filesize($file)); 
    ob_clean(); 
    flush(); 
    readfile($file); 
    exit; 
} 
?> 

Đây có phải là tất cả những gì tôi phải làm để bắt chước hành vi sao cho cả hai yêu cầu hoạt động theo cùng một cách và trả về cùng một câu trả lời giống nhau? Hoặc là có bất cứ điều gì tôi đang mất tích.

Tôi đang sử dụng một số mã trực tuyến trên iOS (không liên quan ở đây) và cả hai yêu cầu phát âm thanh tốt nhưng tôi không thể tìm đúng cách bằng yêu cầu php nhưng tôi có thể yêu cầu mp3 trực tiếp.

Vì vậy, mà không đi vào chi tiết về bản thân ứng dụng, tôi muốn loại bỏ biến này trước tiên. Có điều gì tôi cần phải làm để đảm bảo rằng từ quan điểm của một ứng dụng khác, hai yêu cầu này sẽ trả lại cùng một dữ liệu chính xác?

Cảm ơn mọi thông tin bạn có thể cung cấp cho tôi tại đây.

Cập nhật

Hóa ra câu hỏi của tôi thực sự nên đã đọc "làm thế nào để bạn hỗ trợ tìm kiếm của một mp3 khi trở về từ một kịch bản php?".

+0

Thú vị câu hỏi . Có thể phù hợp với _ [Đánh giá mã] (http://codereview.stackexchange.com/) _, vì không có vấn đề cụ thể. –

+0

@MichaelJasper, câu hỏi cụ thể (như tôi thấy nó) là "Mã này có bắt chước một yêu cầu trực tiếp hoàn toàn không?". – jball

+0

Kịch bản PHP nhỏ này không thực hiện đầy đủ yêu cầu HTTP và xử lý repsonse. Bạn không thể mong đợi rằng nó xử lý tất cả các yêu cầu như một máy chủ http đầy đủ. – hakre

Trả lời

6

Để hỗ trợ tìm kiếm, bạn thường sẽ phải hỗ trợ yêu cầu phạm vi.

Từ RFC: http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.35

Xem thêm: Resumable downloads when using PHP to send the file?

+0

Cảm ơn, điều này đã làm được! Tôi đã thay thế testmp3 của mình.php với câu trả lời từ liên kết thứ hai của bạn và tìm kiếm các công trình ngay bây giờ. Nó có liên quan đến Phạm vi như bạn đã đề cập. – nebs

1

của nó có lẽ tốt hơn để xử lý này với một sửa đổi .htaccess chứ không phải là một số mã PHP.
Đây là số link on htaccess để giúp bạn bắt đầu.

Nếu bạn có một thư mục toàn bộ các file .mp3 mà bạn muốn xuất hiện như tải thay vì chơi nó trong trình duyệt, bạn chỉ cần sửa đổi các tập tin .htaccess trong thư mục đó để bao gồm

AddType application/octet-stream .mp3 
+0

Đây không thực sự là một cách hay để làm điều đó. Có nhiều lý do bạn có thể muốn trả về một tệp MP3 bằng PHP, chẳng hạn như đọc các tham số trong cơ sở dữ liệu để tìm nạp tệp chính xác. Mặc dù vậy, việc thay đổi kiểu đó thành 'application/octet-stream' không phải là cách thích hợp để bắt buộc tải xuống. Làm thế nào là kết thúc nhận được nghĩa vụ phải xác định dứt khoát loại? Phương pháp thích hợp là đặt tiêu đề bố trí nội dung. – Brad

+0

Bạn gửi tiêu đề '302 Đã di chuyển tạm thời 'để chuyển tiếp chúng đến tệp thích hợp. Bây giờ nếu bạn đang tìm cách ngăn mọi người chia sẻ liên kết tải xuống hoặc yêu cầu xác thực để tải xuống, đây không phải là cách để đi, nhưng đối với hầu hết các trường hợp, điều này sẽ chỉ hoạt động tốt. –

Các vấn đề liên quan