我已经将一些示例mp3文件上传到httpdocs之外的目录,我确保通过正确配置open_basedir并测试该目录是否正常工作,PHP可以访问它。
我想要做的是通过PHP文件传输这些文件,因为未经过身份验证的用户永远不应该访问这些文件。我目前正在使用jPlayer,并期望setMedia函数看起来应该类似于:
$("#jquery_jplayer").jPlayer("setMedia", { mp3: "stream.php?track=" + id + ".mp3" });
我已尝试在stream.php中设置内容标题等,目前看起来像这样:
$filePath = "../song_files/mp3/";
$fileName = "$_GET[track].mp3";
header("Content-Type: audio/mpeg");
header('Content-Disposition: attachment; filename="'.$fileName.'"');
getFile($filePath + $fileName);
如果我直接加载此页面,mp3文件下载并播放正常,但是当我使用上面的javascript时,jPlayer不播放该曲目。
我看过这篇文章(Streaming an MP3 on stdout to Jplayer using PHP),看起来用户正试图达到我想要的效果,但在测试解决方案后我一直遇到问题,我得到的只是“CURL”失败”。
我可以使用任何不同的方法来实现这一目标。指出我正确的方向将非常感激。
答案 0 :(得分:0)
在搜索了一些之后,我找到了一个工作正常的解决方案。我使用了类似主题的代码(PHP to protect PDF and DOC)
我将放置此处使用的代码以帮助正确回答问题:
//check users is loged in and valid for download if not redirect them out
// YOU NEED TO ADD CODE HERE FOR THAT CHECK
// array of support file types for download script and there mimetype
$mimeTypes = array(
'doc' => 'application/msword',
'pdf' => 'application/pdf',
);
// set the file here (best of using a $_GET[])
$file = "../documents/file.doc";
// gets the extension of the file to be loaded for searching array above
$ext = explode('.', $file);
$ext = end($ext);
// gets the file name to send to the browser to force download of file
$fileName = explode("/", $file);
$fileName = end($fileName);
// opens the file for reading and sends headers to browser
$fp = fopen($file,"r") ;
header("Content-Type: ".$mimeTypes[$ext]);
header('Content-Disposition: attachment; filename="'.$fileName.'"');
// reads file and send the raw code to browser
while (! feof($fp)) {
$buff = fread($fp,4096);
echo $buff;
}
// closes file after whe have finished reading it
fclose($fp);
</code></pre>