0

ダウンロード スクリプトの関連コード:

$fp = @fopen($file, 'rb');

while(!feof($fp) && ($p = ftell($fp)) <= $end) {

    if ($p + $buffer > $end) {
        $buffer = $end - $p + 1;
    }
    echo fread($fp, $buffer);
    flush();
    if($limits["Max_DL"]) sleep(1); 
}

fclose($fp);

ダウンロードの進行中は、同じサイトの他のページは読み込まれません。しかし、それらは別のブラウザに読み込まれます。これは、ダウンロードページが継続的に「ロード」されているため、他のページのロードが停止しているという事実と関係があると思いますか?

これを修正する方法について何か提案はありますか? 大きなファイルの場合、ユーザーがダウンロード中にサイトを閲覧できないようにしたくありません

4

2 に答える 2

3

ダウンロード スクリプトがsession_start()任意の時点で呼び出さsession_write_close()れる場合は、ファイルをユーザーにストリーミングする前に呼び出す必要があります。

これにより、PHP セッション ファイルが閉じられ、ユーザーは別のページを読み込めるようになります。別のページはおそらく呼び出しsession_start中 (したがって、セッション ファイルのロックを待機中) です。

$_SESSION注:を呼び出した後でも読み取ることができますsession_write_close()が、変更はすべて破棄されます。セッションへの変更が完了したことを PHP に通知したところです。

詳細: http://us2.php.net/manual/en/function.session-write-close.php

于 2014-01-14T18:19:04.317 に答える
0

PHP は、大きなファイルを配信するための最適なソリューションではありません。ユーザーごとにサーバー上のプロセスをダウンロード全体にわたって占有することになるからです。Apache または nginx を使用している場合は、mod_xsendfileまたはXSendfileを使用してファイルを提供することを検討する必要があります。

それが不可能な場合は、readfile()関数を使用して、ファイルを配信するプロセスを少し合理化することをいつでも試すことができます。

于 2012-04-05T00:59:01.540 に答える