私の経験
コードに問題はありません。私は一度この問題を抱えていました..そしてそれは単純なキャッシュの問題でFirefox
ありContent-Length
、あなたはそれを発見しました
c.php
<audio controls="controls" id="audio-sample" preload="auto">
<source src="a.php?type=ogg&id=0" type="audio/ogg" />
<source src="a.php?type=mp3&id=1" type="audio/mp3" />
</audio>
a.php
$id = intval($_GET['id']);
$files = array(0 => "audio.ogg",1 => "audio.mp3");
$filename = $files[$id];
header('Content-Type: ' . mime_content_type($filename));
header("Content-transfer-encoding: binary");
header("Content-Length: " . filesize($filename));
ob_clean();
flush();
readfile($filename);
exit();
これは100%
Firefoxで機能しましたがreadfile($filename)
、
readfile("SIMPLE ERROR ERROR");
Firefoxの敷居は、ファイルを支払わない代わりにオーディオを支払ってくれます。間違いを認識させる唯一の方法は、src
ファイルにランダムな文字列を追加することでした。
<source src="a.php?type=ogg&id=0&<?php echo mt_rand(); ?>" type="audio/ogg" />
^---- rand string
このようにして、URLが要求され、Firefoxは音声を即座に再生しました。
問題
あなたが以前にコンテンツをストリーミングしようとしたので、Zero Content-Length
それはあなたのオーディオが支払っていない理由です.....Firefoxは最初の無効なコンテンツをキャッシュしました
解決
すべてのキャッシュをクリアします..上記のコードを使用すると、コードは正常に機能するか、テスト用にコードにrandパラメーターを追加するだけです。
無効な相対位置
永続的に使用すると、オーディオファイルをキャッシュmt_rand()
することが困難になり、無効な相対ソリューションになります。Firefox
キャッシュのクリーニング後に削除するmt_rand
と、これは修正されます