php - 从具有 .htaccess 限制下载的文件夹中播放 mp3

标签 php html .htaccess playback

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

我将所有 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/

相关文章:

html - 水平和垂直居中输入元素

php - docker + wordpress 安装 = 错误 500

php - 计算上传文件的数量

html - 无法使用 CSS 为 SELECT 元素设置宽度

javascript - 带下拉菜单的菜单按钮

wordpress - 尝试使用 htaccess 重定向站点时出现 "Too many redirects"

apache - 使用 .htaccess 将所有 http 请求重定向到 https 时重定向循环

php - 这样处理错误的方法在PHP中安全吗?这是惯用的吗?

php - Windows 上的 postgresql + nginx 运行时错误

PHP:检查数组元素是否存在跳过一级