2009-07-04 8 views
4

ブラウザに送信するデータストリームを生成していて、ブラウザを閉じると、残りのストリームを生成または送信する必要がないことをPHP内で教えてもらえますか?私はこのループに何かを挿入したいと思います:ブラウザが終了したときにPHPが通知できますか?

while (!feof($pipes[1])) { 
    echo fgets($pipes[1]); 
} 

私のフォールバック計画は、ブラウザがデータを生成のプロセスを殺すために、別のPHPページをヒットするのJavaScriptのonunloadを使用することですが、それがあればきれいになりますPHPは私がどこにもエコーしていないことを伝えることができます。

答えて

10

デフォルトでは、ユーザーがナビゲートすると、PHPはスクリプトを中止します。しかし、あなたが設定した設定がignore_user_abortとなっているので、これが起こらないようにする必要があります。
http://php.net/manual/en/misc.configuration.php

1

register_shutdown_function()という機能もありますが、実行が停止すると実行されます。私は実際にそれを使用したことがないので、私はそれがどれくらいうまく動作するか保証しませんが、私は完全性のためにそれを言いたいと思いました。

+0

閉じることができますが、この場合、ユーザーの中止に関するデータの処理を停止したいだけです。 – Ballsacian1

1

正常に読み込まれるとスクリプトは自動的に中止されます(No ajax)。しかし、xmlhttprequestを使ってphp経由で長いポーリングを実装したいのであれば、phpがそれを検出できないので、何らかのjavascriptで行う必要があると思います。また、正確な場合を知りたい。

0

これらの回答は、私が探していたものに向かって私を指摘しました。基礎をなすプロセスはそれを殺すために特別な注意が必要でした。私はループから飛び降りる必要があった。再度ありがとう、スタックオーバーフロー。

while (!feof($pipes[1]) && !connection_aborted()) 
{ 
    echo fgets($pipes[1]); 
} 

if (connection_aborted()) 
{ 
    exec('kill -4 '.$mypid); 
} 
関連する問題