我的经验
您的代码没有任何问题。我曾经遇到过这个问题,而且..这是一个简单的缓存问题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 sill 为我支付音频费用,而不是不支付任何文件费用,唯一让它意识到错误的方法是在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
缓存后删除,这将得到修复