【问题标题】:playing mp3 from a folder which has .htaccess restriction for download从具有 .htaccess 下载限制的文件夹播放 mp3
【发布时间】:2012-10-09 22:30:32
【问题描述】:

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

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

但毕竟这首歌没有播放:( 我应该进行哪些更改才能开始播放歌曲?

提前谢谢你。

【问题讨论】:

  • 上述文件在哪里?你现在从脚本中得到什么结果?
  • www.abc.com/play.php 文件夹在www.abc.com/audio 目前页面上显示的是html5音频,但是没有播放歌曲。跨度>

标签: php html .htaccess playback


【解决方案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=&lt;hash value expected by your functions&gt;

【讨论】:

  • html5 音频现在没有显示,如果我评论 readfile($track);它正在显示 html5 音频,但没有播放歌曲
  • @RahulKumar 请显示getPathFromHash() 和getFileNameFromHash() 函数返回的一些实际样本值,以及您为获取这些值而提供的“哈希”值。
  • getPathFromHash() - ./audio/Abhi na jao chhod kar.mp3 getFileNameFromHash() - /audio/Abhi na jao chhod kar.mp3 哈希值:d41d8cd98f00b204e9800998ecf8427e 哈希值和相应的文件路径存储在db表,该函数只是从哈希值中检索路径,并使用explode函数从路径中提取轨道。
  • @RahulKumar 您在这里遇到的问题是,如果不首先传递一个值,您就无法获得$path 的值,因此您有一个循环引用。您需要将生成 HTML 的代码与将文件发送到浏览器的代码分开。
  • @RahulKumar 尝试运行这段代码,你会明白我的意思:pastebin.com/GHaVx3tg
猜你喜欢
  • 1970-01-01
  • 2011-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-09
  • 2016-07-31
相关资源
最近更新 更多