2

私のテストサーバーは、phpコーディングを行うためのapache 2です。MP3サーバーを作りたいです。

すべて正常に動作していますが、今日は mp3 情報を取得し、変更、削除などを行って管理ページを作成しようとしました。選択した mp3 のページに再生ボタンがあり、再生ボタンをクリックすると、ヘッダー オプションでファイルがロードされ、再生されます。 、

サンプルコードは次のとおりです。

session control &
$filename = '/home/bla..bla/mp3/'. $_GET['v'] . '.mp3';
if(file_exists($filename)) {
    header('Content-Type: audio/mpeg');
    header('Content-length: '.filesize($filename));
    header('X-Pad: avoid browser bug');
    header('Cache-Control: no-cache');
    readfile($filename);
}else{
    exit();
}

すべて問題ないように見えますが、別のボタンをクリックしても (たとえば、ajax コードで mp3 を再度検索するか、同じページで JavaScript を使用して値を取得します)、何も起こりません。

ページは mp3 ファイルの読み込みを待機しています。リクエストをブロックしているようです。mp3 が %60 または %70 をロードするとき、クエリが来ます。

解決策が見つからない場合、私は殺人者になります:)

ps: 私のシステムapache2, PHP5 , MySQL,は、管理ページでオーディオ タグを使用して構築されていますが、同じ問題がありjplayerます。

4

1 に答える 1

1

ほとんどの場合、セッション ロックが発生しています。あなたがいるページをリクエストするsession_start()と、セッションファイルが開かれ、同時アクセスの問題を防ぐためにロックされます。ファイルは、現在のスクリプトが終了するまでロックされたままになります。ファイルがロックされている間、他のプロセスはファイルにアクセスできず、ロックが解除されるまで待機します。

MP3 ファイルのストリーミングなど、長時間実行されるタスクを実行する前に、 でセッションのロックを解除してsession_write_closeください。

さらに良いことに、Web サーバーにファイルのストリーミングというありふれたタスクを処理させ、PHP プロセスを忙しくさせないようにします。mod_xsendfileを試してください。

于 2013-01-15T04:37:47.867 に答える