HTMLファイルのパスを隠すために、PHPスクリプトを使用してmp3ファイルを送信しようとしています。 mp3クロムの半分を除いて、すべてが完璧にうまくいっています。私はGET [URL]エラーを返します。 mp3の残りの部分は空白です。オーディオタグはまだファイルを読み込んでいると思っていますが、サウンドはありません。HTML5のオーディオタグで使用するPHP経由のMP3ファイルをmp3の途中で送信できない
これは、私はPHPからmp3ファイルを送信しています方法です:
if (file_exists($filename)) {
header("Content-Transfer-Encoding: binary");
header("Content-Type: audio/mpeg");
header('Content-length: ' . filesize($filename));
header('Content-Disposition: inline; filename="' . $filename . '"');
header('X-Pad: avoid browser bug');
header('Cache-Control: no-cache');
readfile($filename);
exit;
}
else {
header($_SERVER['SERVER_PROTOCOL'].' 404 Not Found', true, 404);
echo "no file";
}
編集:私はのEtagヘッダを追加しました。物事を良くするようです。問題はまだ発生しますが、頻繁には発生しません。 :/
Edit2:PHPファイルに送信されたリクエストヘッダーが、mp3ファイルに直接送信されたヘッダーと異なることに気付きました。実際には、mp3ファイルにHTTP_RANGEリクエストが送信されていますが、PHPからファイルを取得しようとすると、この範囲リクエストがありません。 (これはChromeにあります)。なぜこれが起こっているのでしょうか?
あなたのスクリプトを動作させるだけのハッシュと、この例で使用されたフィールドを持つデータベースのテーブルがあり、範囲を要求する可能性があるクロームでHTML 5タグ。スクリプトのサポート範囲を作ったり、小さなファイルで試してみてください。 「PHPのHTTP_RANGEヘッダーの解析」(http://stackoverflow.com/questions/2209204/parsing-http-range-header-in-php)も参照してください。 – hakre
私のファイルはあまり大きくありません。平均サイズは10MB未満です。最大の容量は30MBです。デフォルトのコンテンツ範囲は何ですか? 50 MBのようなものに設定できますか? – Roozbeh15
@hakre、これは答えになるはずです。 – davidethell