我一直在尝试制作一个音乐流媒体网站。
我将所有 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>
但毕竟,这首歌没有播放 :( 我应该进行哪些更改才能开始播放歌曲?
提前谢谢你。
最佳答案
我看到你有两个问题:
1)
echo $track = getFileNameFromHash($_GET['value']);
删除 echo
从这一行。这将导致文件名被输出并且至少会破坏文件数据,它可能还会阻止正确设置 header 。
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
包含一个合理的值(value)。应该是/play.php?value=<hash value expected by your functions>
关于php - 从具有 .htaccess 限制下载的文件夹中播放 mp3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12972044/