Воспроизведение mp3 из папки, которая имеет.ограничение htaccess для загрузки
Я пытался сделать сайт потоковой передачи музыки.
Я храню все mp3 в www.abc.com/audio папка .
Эта папка имеет .ограничение htaccess, так что никто не может загрузить любой файл.
После стольких поисков я не могу найти, как играть mp3 из этой папки, используя php из этой папки.
PHP-код для файла play-это filename: 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 в папке audio имеет вид
<FilesMatch ".(ogg|mp3)$">
Order Allow,Deny
Deny from all
</FilesMatch>
Но после всего этого песня становится не играю :( Какие изменения я должен сделать, чтобы песня начала играть?
Заранее благодарю вас.
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>