2013-04-17 34 views
5

Tôi phải tạo tiêu đề cho tệp .wav để tệp phát trong phần tử.Tiêu đề Php để tải xuống tệp .wav nhưng không thể phát trong phần đính kèm

$filename = basename($_GET['file']); 

$pos = strrpos($file, '.'); 

$extension = ($pos !== false) ? substr($file, $pos) : ''; 

$mime_type = ""; 
switch ($extension) { 
    case '.mp3': 
     $mime_type = "audio/mpeg, audio/x-mpeg, audio/x-mpeg-3, audio/mpeg3"; 
     break; 
    case '.ulaw': 
     $mime_type = "audio/basic"; 
     break; 
    case '.gsm': 
     $mime_type = "audio/x-gsm"; 
     break; 
    case '.wav': 
     $mime_type = "audio/x-wav, audio/wav"; 
     break; 
} 

if(file_exists($filename)){ 
    $handle = fopen($filename, "rb"); 

    header('Content-Description: File Transfer'); 
    header("Content-Transfer-Encoding: binary"); 
    header('Content-Type: '.$mime_type); 
    header('Content-length: ' . filesize($filename)); 
    header('Content-Disposition: attachment;filename="' . $filename.'"'); 

    while (!feof($handle)) { 
     echo fread($handle, 4096); 
     flush(); 
    } 
    fclose($handle); 
}else{ 
    header("HTTP/1.0 404 Not Found"); 
} 

này được gọi bằng www.example.com/listen?file=Test.en.wav

Còn bây giờ, khi tôi đi trên trang đó, tải tập tin và các công trình (Một nửa trong số những gì tôi muốn), nhưng khi tôi cố gắng:

<embed src="www.example.com/listen?file=Test.en.wav"> 

Trình phát xuất hiện nhưng tệp không/không thể phát.

Chỉnh sửa: Tôi muốn biết liệu có thể phát và chơi như thế nào không?

+0

Bạn đã gửi bài đang toàn bộ người chơi ở trên không? Echo chỉ in ra các conents của một tập tin, làm thế nào là nó nghĩa vụ phải chơi .wav? – Wookie88

+0

Xin lỗi, câu hỏi của tôi không cụ thể lắm. Muốn tôi muốn biết là làm thế nào để chơi các tập tin, nếu nó có thể. Cảm ơn bạn! – Benoit

+0

Xin chào, tôi không biết nếu điều này cố ý nhưng 'echo fread ($ xử lý, 4096);' sẽ chỉ hiển thị 4 mB đầu tiên của một tệp ... – user1909426

Trả lời

0

Hãy thử audio/vnd.wave.

mỗi RFC 2361

Cũng thử chỉ định một loại MIME duy nhất cho mỗi yêu cầu thay vì một danh sách dấu phẩy tách ra.

case '.mp3': 
    $mime_type = "audio/mpeg"; 

Bạn sẽ có lẽ cũng cần phải cài đặt một cái gì đó giống như Quicktime để chơi những trực tiếp trong trình duyệt của bạn. Một số trình duyệt cố gắng nội dung [MIME] đánh hơi để sửa các loại MIME bị lỗi.

+0

Nếu Tôi chỉ sử dụng 1 mime cho mpeg, họ ngừng chơi trong firefox, .wav vẫn không muốn chơi trên firefox, nhưng họ làm việc trong chrome. Cảm ơn bạn – Benoit

0

Di chuyển tiêu đề khác và chỉ cần thiết lập "Content-Type" tiêu đề

header('Content-Type: '.$mime_type); 
Các vấn đề liên quan