【发布时间】:2011-01-22 10:18:18
【问题描述】:
我的情况与提问的人非常相似: Can I serve MP3 files with PHP? 基本上我试图保护 mp3 文件不被直接下载,所以用户必须先通过 php 来获得身份验证。 这是我的代码:
header('Content-type: audio/mpeg');
header('Content-length: ' . filesize($file));
header('X-Pad: avoid browser bug');
Header('Cache-Control: no-cache');
header("Content-Transfer-Encoding: binary");
header("Content-Type: audio/mpeg, audio/x-mpeg, audio/x-mpeg-3, audio/mpeg3");
readfile($file);
这是我的问题:文件只播放很小的开头部分(通过浏览器中的 Quicktime)然后停止 - Quicktime 似乎认为文件的长度仅与它管理的块一样长下载。当我重新加载时 - 它会播放一个稍微大一点的块 - 无论它设法下载到那个点。
这是我发送的标头中的问题吗?我将如何流式传输这样的文件? 如果 swf 正在从该文件中读取,会不会有问题?
谢谢!
谢谢大家的回答。尽管这些东西都不能完全解决问题,但其中许多都让我朝着正确的方向前进。非常感激。 有关完整的解决方案,请参阅下面的答案
【问题讨论】:
-
我想你的真实代码中没有那个错字(“标题”)?此外,您不需要 X-Pad hack。这仅对古老的 Netscape 是必需的(请参阅george.hotelling.net/90percent/geekery/…)。您不需要 Content-Transfer-Encoding,您应该只指定一次 Content-Type(音频/mpeg 可以)。
-
@Matthew Flaschen:PHP 函数不区分大小写,所以这只是一个一致性问题。 Content-Type 可能是这里真正的问题。
标签: php mp3 header filestream readfile