2009-10-04 8 views
10

CAPTACHASなどで使用するためにphpで画像を提供するのと同じ方法で、同じことをオーディオファイルで行うことは可能ですか?PHPでMP3ファイルを提供できますか?

私はMP3ファイルを再生することができサファリを、使用しています。この

<?php 

$track = "sometrack.mp3"; 

if(file_exists($track)) { 
    header('Content-type: audio/mpeg'); 
    header('Content-length: ' . filesize($track)); 
    header('Content-Disposition: filename="sometrack.mp3"'); 
    header('X-Pad: avoid browser bug'); 
    header('Cache-Control: no-cache'); 
    print file_get_contents($track); 
} else { 
    echo "no file"; 
} 

を試してみました。 Safariを適切なモードに蹴って、数秒間Quicktimeコントロールを取得し、次に「No Video」を取得します。

私はこれをやりたいと思っている場合に備えて、不正なダウンロードからファイルを保護しようとしています。

+0

あなたはそれがうまくいかない理由はわかりませんが、 ファイルにアクセスするURLのコマンドラインからwget/curlを試して、期待どおりに動作していることを確認してください。 –

答えて

14

あなたのContent-処分は次のようになります。

header('Content-Disposition: attachment; filename="sometrack.mp3"'); 

ことがが問題だ場合はわかりません。

readfile($rSong); 

はまた、それが網羅Content-Typeヘッダを使用することを傷つけると、コンテンツ転送エンコーディングを設定することはできません:

header("Content-Transfer-Encoding: binary"); 
header("Content-Type: audio/mpeg, audio/x-mpeg, audio/x-mpeg-3, audio/mpeg3"); 
+1

それらの余分なヘッダーはすべての違いを作った!ありがとう。私はブラウザでトラックを再生したいので、今は「添付ファイル」を削除しましたが、後で人々がトラックをダウンロードするときに使用する必要があります。素晴らしいアドバイス、ありがとう。 – gargantuan

+0

'XSendfile'(Apachaとnginx otoh)は、サーバー/ PHPの負荷を大幅に減らし、ドキュメントルートの外にあるドキュメントを使用することに注意してください。 – Wrikken

1

私はまた、出力にファイルをreadfileを使用することをお勧めしますThis Classを使用してみてくださいダウンロードの再開と速度制限をサポートしていますmp3ダウンロードのウェブサイトの所有者として私が必要と信じています

関連する問題