2

我一直在尝试制作一个音乐流媒体网站。

我将所有 mp3 存储在 www.abc.com/audio 文件夹中。

此文件夹具有 .htaccess 限制,因此没有人可以下载任何文件。

经过这么多搜索后,我无法找到如何使用该文件夹中的 php 播放该文件夹中的 mp3。

播放文件的 PHP 代码是文件名:play.php

<?php
//print_r($_GET);
include_once('./functions.php');

$path=getPathFromHash($_GET['value']);   //get path from hash_value ex. www.abc.com/audio/1.mp3
echo $track = getFileNameFromHash($_GET['value']);  //get file name ex. 1.mp3

if (file_exists($track)) {
header("Content-Type: audio/mpeg");
header('Content-Length: ' . filesize($track));
header('Content-Disposition: inline; filename=' . $track);
header('X-Pad: avoid browser bug');
header('Cache-Control: no-cache');
readfile($track);
exit;
} else {
    header($_SERVER['SERVER_PROTOCOL'].' 404 Not Found', true, 404);
    echo "no file";
}


?>
<audio src="<?php echo $path?>" autoplay loop controls></audio>

我在音频文件夹中的 .htaccess 文件是

<FilesMatch ".(ogg|mp3)$">
Order Allow,Deny
Deny from all
</FilesMatch>

但毕竟这首歌没有播放:(我应该做些什么改变才能让歌曲开始播放?

先感谢您。

4

1 回答 1

1

我可以看到您有两个问题:

1)

echo $track = getFileNameFromHash($_GET['value']);

echo从此行中删除。这将导致文件名被输出并且至少会破坏文件数据,它也可能会阻止标题设置正确。

2)

您可能需要告诉 PHP 文件在audio/目录中。您说getFileNameFromHash()返回ex. 1.mp3-PHP 将在当前工作目录中查找 1.mp3,根据您上面的评论,该目录将是 webroot。

尝试将上述行更改为

$track = 'audio/' . getFileNameFromHash($_GET['value']);

...这也意味着您应该将Content-Disposition行更改为:

header('Content-Disposition: inline; filename="' . basename($track) . '"');

所有这些都假设$path包含一个合理的价值。它应该是/play.php?value=<hash value expected by your functions>

于 2012-10-19T10:22:19.157 回答