如何使用php将mp3加载到JW Player中

时间:2014-09-30 19:15:35

标签: php cakephp cakephp-1.3 jwplayer

我正在尝试使用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';,但它不起作用......

3 个答案:

答案 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',