PHP流媒体MP3

Yuv*_*rmi 12 php mp3 header filestream readfile

我的问题非常相似: 我可以用PHP提供MP3文件吗? 基本上我试图保护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);
Run Code Online (Sandbox Code Playgroud)

这是我的问题:文件只占一开始的一小部分(通过浏览器中的Quicktime)然后停止 - Quicktime似乎认为文件长度只与它设法下载的块一样长.当我重新加载时 - 它会播放一个稍微大一点的块 - 无论它设法下载到那一点.

这是我发送的标题中的问题吗?我该如何传输这样的文件?如果swf正在从该文件中读取,这是一个问题吗?

谢谢!


谢谢你们所有答案.虽然这些事情都没有解决问题,但很多都让我朝着正确的方向前进.非常感激.有关完整解决方案,请参阅下面的答案

Yuv*_*rmi 8

这就是诀窍.

$dir = dirname($_SERVER['DOCUMENT_ROOT'])."/protected_content";
$filename = $_GET['file'];
$file = $dir."/".$filename;

$extension = "mp3";
$mime_type = "audio/mpeg, audio/x-mpeg, audio/x-mpeg-3, audio/mpeg3";

if(file_exists($file)){
    header('Content-type: {$mime_type}');
    header('Content-length: ' . filesize($file));
    header('Content-Disposition: filename="' . $filename);
    header('X-Pad: avoid browser bug');
    header('Cache-Control: no-cache');
    readfile($file);
}else{
    header("HTTP/1.0 404 Not Found");
}
Run Code Online (Sandbox Code Playgroud)

  • 不,他不是那个意思.想想你自己,如果有人尝试这个http://yoursite.com/yourscript.php?file=../../../home/someonesgirlfriend/secretdiary.doc会发生什么. (6认同)
  • 您可能希望在阅读之前对$ _GET ['file']进行一些验证/清理...... (2认同)
  • 要使其可查找,只需添加以下标题行,但在此代码中不支持恢复。**`header('Accept-Ranges: bytes');`** 如果你需要更好的 Content-Transfer-Encoding 尝试使用 `header("Content-Transfer-Encoding: chunked");` (2认同)