Воспроизведение 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 2

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>