我正在尝试使用php将mp3加载到JW Player 5中以检索实际文件。这是播放器的javascript代码:
jwplayer('mediaplayer').setup({
'flashplayer': 'player.swf',
'id': 'playerID',
'type': 'mp3',
'width': '600',
'height': '49',
'file': '/get_mp3/<?php echo $filename; ?>',
});
文件属性具有PHP函数的URL(我使用 CakepHP ,最后 / 之后的部分是变量,函数被传递。)
这是PHP函数:
function get_mp3($filename) {
$file_path = '/path/to/files/' .$filename. '.mp3';
header("pragma : no-cache");
header("Expires: Thu, 19 Nov 1981 08:52:00 GMT");
header("Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0");
header("Content-Description: File Transfer");
header("Content-Type: audio/mpeg3");
header("Content-Disposition: inline; filename=" .$filename. ".mp3");
header("Content-Location: " .$filename. ".mp3");
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".filesize($file_path));
readfile($file_path);
}
如果我通过网络浏览器调用该功能(例如 mydomain.com/get_mp3/test_file ),它会提示下载正确的文件,这似乎表明PHP代码正在运行。
但是,当我在JW PLayer的文件属性上使用它时,它不会加载任何内容或显示任何类型的错误。
我已经尝试调整this SO问题所显示的内容,但是我无法使其发挥作用,我不知道是否因为视频不同或者因为JW PLayer 6和我的精神分子是5
编辑:测试CakePHP是否存在问题
因此测试问题是由于某种原因,CakePHP无法使用JW Player我将以下PHP代码放在外部PHP文件中:
$filename= 'my_filename';
$file = $_SERVER['DOCUMENT_ROOT']. '/path/to/files/' .$filename. '.mp3';
header("pragma : no-cache");
header("Expires: Thu, 19 Nov 1981 08:52:00 GMT");
header("Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0");
header("Content-Description: File Transfer");
header("Content-Type: audio/x-mp3");
header("Content-Disposition: inline; filename=" .$filename. ".mp3");
header("Content-Location: " .$filename. ".mp3");
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".filesize($file));
readfile($file);
现在,JW Player声明中的file
行如下所示:
'file': '/get_mp3.php',
有了它仍然无法正常工作。如果我直接访问 get_mp3.php 页面,系统会提示我下载该文件,所以再看看PHP代码的工作原理......
编辑2
所以我找到了问题的罪魁祸首:音频文件的路径。如果我把文件放在网站的根文件夹中,并且我使用像$file_path = $filename. '.mp3';
这样的文件路径变量,它可以正常工作。
问题是音频文件位于同一服务器的不同文件夹中,我无法移动它们...如何更改PHP脚本以查找当前路径中的文件?我已经尝试使用$file = '/path/to/files/' .$filename. '.mp3';
和$file = $_SERVER['DOCUMENT_ROOT']. '/path/to/files/' .$filename. '.mp3';
,但它不起作用......
答案 0 :(得分:1)
将您的内容类型更改为(“Content-Type:audio / x-mp3”);
答案 1 :(得分:1)
事实证明我的问题出在PHP脚本中的文件路径中。我正在使用$_SERVER['DOCUMENT_ROOT']
而只是/
用于路径并且它无法正常工作,但后来我意识到将文件移动到与脚本相同的文件夹中。在我的情况下,我仍然需要找到一种方法来从不同的文件夹访问这些文件,并使用相对路径来做到这一点。类似的东西:
$filename= 'my_filename';
$file = '../../../path/to/files/' .$filename. '.mp3';
header("pragma : no-cache");
header("Expires: Thu, 19 Nov 1981 08:52:00 GMT");
header("Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0");
header("Content-Description: File Transfer");
header("Content-Type: audio/x-mp3");
header("Content-Disposition: inline; filename=" .$filename. ".mp3");
header("Content-Location: " .$filename. ".mp3");
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".filesize($file));
readfile($file);
答案 2 :(得分:0)
因为您使用的是JW5。
下:
'file': '/get_mp3/<?php echo $filename; ?>',
添加:
'provider': 'sound',