2

オーディオ ストリームの URL を非表示にする必要があるため、readfile();これを行うために使用するダウンロード スクリプトがあるため、同じことができると考えましたが、javascritpt でこれを操作する方法がわかりません。実際、この方法でそれが可能かどうかはわかりません。

これまでのところ、再生ボタンがクリックされたときに ID からトラックの URL を取得するために JavaScript によってアクセスされる PHP ファイルがあります。

$T_ID = mysqli_real_escape_string($con, $_GET['t_id']);
$qry = "SELECT url FROM tracks WHERE T_ID = $T_ID";
$result = mysqli_query($con, $qry);
$row = mysqli_fetch_array($result);
$url = $row['url'];
$path_parts = pathinfo($url); //get path info
$file_name  = $path_parts['basename']; //only include mp3 track just incase path added in there
$file_path  = 'uploads/' . $file_name; //add path
echo $file_path;

そこからの URL は、JavaScript がnew Audio();. ただし、コンソールを開いてネットワークタブを表示することを知っている人は誰でも、トラックの URL を見つけてダウンロードすることができます。これは、私が望んでいるものでも、ユーザーが望んでいるものでもありません。

私の予備的な考えは、に置き換えることですが、何らかの形でjavascriptで操作echo($file_path)するreadfile($file_path)必要があることはわかっています. PHPがファイルをバイナリとして読み取る場合、javascriptもそれをストリーミングすることができますか?

4

1 に答える 1

0

readfile() を使用して、php スクリプトをダウンロード用の URL にするだけです。javascript Audio() オブジェクトは、ファイルへの直接 URL の場合と同様に、その URL をフェッチします (そして、すべてがロードされる前に再生を開始する可能性があります)。ストリーミングではありません。ファイルへのURLを隠しているだけです。

アクセスを制限したい場合、これは良い方法ですが、誰かがこの新しい URL を使用してダウンロードできる場合は、ファイルの実際の場所以外は何も保護していません。

また、正しい MIME タイプのヘッダーを設定することを忘れないでください。

header('Content-Type: audio/mpeg');
header('Content-Length: '.filesize($file_path));
readfile($file_path);

キャッシュの有効期限ヘッダーなどを設定することもできます。

于 2013-08-07T13:19:47.110 に答える