2

私は音楽ストリーミングのウェブサイトを作ろうとしています。

私はすべての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>

しかし、結局のところ、曲は再生されていません:(曲の再生を開始するには、どのような変更を加える必要がありますか?

前もって感謝します。

4

1 に答える 1

1

私が見ることができる2つの問題があります:

1)

echo $track = getFileNameFromHash($_GET['value']);

echoこの行からを削除します。これにより、ファイル名が出力され、少なくともファイルデータが破損し、ヘッダーも正しく設定されなくなる可能性があります。

2)

おそらく、ファイルがaudio/ディレクトリにあることをPHPに伝える必要があります。getFileNameFromHash()あなたはそれが返されると言いますex. 1.mp3-まあPHPは現在の作業ディレクトリで1.mp3を探します、それは上記のあなたのコメントによればウェブルートになります。

上記の行を次のように変更してみてください

$track = 'audio/' . getFileNameFromHash($_GET['value']);

Content-Disposition...これは、行を次のように変更する必要があることも意味します。

header('Content-Disposition: inline; filename="' . basename($track) . '"');

$pathこれはすべて、に適切な値が含まれていることを前提としています。そのはず/play.php?value=<hash value expected by your functions>

于 2012-10-19T10:22:19.157 に答える