0
私はいくつかのことをチェックしてから、8kbのチャンクにファイルをストリームするダウンロードスクリプトを持っています。print/flush文中にPHPスクリプトのタイムアウトが発生しますか?
転送がどのように見えるんループ:私は非常に遅いダウンロードをシミュレートする小さなアプリケーションを書い
$file = @fopen($file_path,"rb");
if ($file) {
while(!feof($file)) {
set_time_limit(60);
print(fread($file, 1024*8));
flush();
if (connection_status()!=0) {
@fclose($file);
die();
}
}
@fclose($file);
}
。ダウンロードを続ける前に2分間待ちます。私は60秒の時間制限を設定していたので、スクリプトがタイムアウトすることを期待しました。これは起こらず、ダウンロードが完了するまでダウンロードが続けられます。 print/flushで費やされた時間は、スクリプトの実行時間には含まれていないようです。これは正しいです? print/flushコマンドの時間制限を指定できるように、クライアント/ブラウザにファイルを送信するより良い方法はありますか? set_time_limit()
から
これは、スクリプトの実行をブロックするflush文の場合には役に立ちません。それが返ってこない場合、私は時間のチェックをすることができません... – Christo
ちょうど興味のために。私はIISでWindows上でテストを実行しましたが、これは私にとっても死ぬことはありませんでした(これは長いことでしたが、IISはPHPの実行期限ではなく、犯人になると思います)。プロダクションサーバーはLinuxとApacheを実行しています。 – Christo