ユーザが適切な認証を持っている場合、隠しファイルをダウンロードするための簡単なPHPスクリプトを作成しました。全体の設定はうまく動作します:適切なヘッダーを送信し、ファイル転送はちょうど良い(小さなファイルの場合はうまく終わります)。DreamhostでPHPが不思議に中断されました
しかし、私が150 MBのファイルを提供しようとすると、その接続はファイルの真ん中近くのどこかで不思議に中断されます。ここでは、関連するコード・フラグメントは、(インターネット上のどこかから取って、私によって適応)です:
function readfile_chunked($filename, $retbytes = TRUE) {
$handle = fopen($filename, 'rb');
if ($handle === false) return false;
while (!feof($handle) and (connection_status()==0)) {
print(fread($handle, 1024*1024));
set_time_limit(0);
ob_flush();
flush();
}
return fclose($handle);
}
私も限り私ができるように、上記のその関数を呼び出す前に、いくつかの他のコードを実行し、問題を解決しようとするが、それは何もしません、教えて:あなたが見ることができるように
session_write_close();
ob_end_clean();
ignore_user_abort();
set_time_limit(0);
は、それが一度にメモリ内のファイル全体をロードしようとか、そのような非常識な何もしません。それをさらに困惑させるために、それを殺す移転の実際のポイントは50から110MBの間に浮かんでいるようであり、お互いに数秒以内に同じファイルへのすべての接続を殺すようです。友人と同時にダウンロードする)。中断されたファイルには何も追加されず、ログにエラーは表示されません。
私はDreamhostを使用していますので、ウォッチドッグが長時間実行されていたためにプロセスが強制終了する可能性があります。問題を分かち合う経験がある人はいますか?他に何か問題がありますか?回避策はありますか?
私のDreamhostは、PHP 5.2.1 FastCGIを使用するように設定されています。
興味深い。たぶん、実行中のプロセスやメモリ使用量などの統計情報を含むファイルに出力を記録する必要があります。有用かもしれません。 – Hamish
あまりにも多くのメモリを消費しているため、長時間実行されているか、またはおそらくそれを強制終了しているため、プロセスを強制終了している可能性があります。 – sberry