2

現在、私はPHPのシステム(Webサービス間でデータを同期するため)(Lithiumフレームワークを使用)に取り組んでおり、curlを介して異なるWebサービスに複数のリクエストを行います。

リクエストのすべてのレスポンスに対して (100 としましょう)。ただし、クライアントが切断された場合 (ブラウザで停止を押すなど)、スクリプトは、クライアントが切断された後も「長く」実行され続けます (ログ ファイルにログ行が記録され続けます)。

私が読んだことから、PHPはブラウザに出力を送信しようとしたときにのみクライアントの切断を検出します。そのため、すべてのリクエスト (およびログ ファイルへのすべての行) の後に、一部のデータをブラウザーにフラッシュしています。ただし、PHP スクリプトは引き続き実行されます。

各ログ呼び出しの後に次のコードが表示されるようになりましたが、これは機能していないようです。

//Die on no connection
ignore_user_abort(false);
echo chr(0); flush(); ob_flush();
if(connection_aborted())
{
    die();
}

スクリプトはそのまま実行され続けます。クライアントが切断された後 (または少なくとも直後) にスクリプトが確実に停止するようにするためにできることはありますか?

編集:質問を投稿した後、常に解決策を見つけるのはなぜですか. 「ob_flush」を追加しましたが、うまくいくようです。とにかく、これを調べてくれた人に感謝します。

4

1 に答える 1

2

ob_flush()の代わりに使用してみてくださいflush()。これにより、出力バッファーがフラッシュされます。

于 2012-10-28T20:23:17.570 に答える