2011-12-31 8 views
0

ユーザーがサーバーに投稿して処理を開始している間にユーザーに何も送信しないで(外部サービスを介してメールを送信するなどの場合、数秒かかる場合があります)、ユーザーは終了する前に別のサイトまたはページに移動します。、サーバーの処理中に別のサイトに行くとどうなりますか?

はサーバーに通知されていますか?

サーバーはいつ放棄しますか?

サーバーで処理を終了しますか?

phpで "atomic"関数を作成する方法はありますか?一度始めたら、それは終了することが保証されていますか?

答えて

2

ユーザークライアントブラウザのデフォルトおよび正しい動作は、ページの読み込みがキャンセルされたことを通知する必要があることです。理由は関係ありません。ユーザーは戻るボタン、停止ボタン、別のリンクをクリックするかブラウザを閉じるだけです。

PHPでは、デフォルトでこの通知を受け取り、処理ページを終了します。これはphp.iniディレクティブignore_user_abortの設定に依存します - this PHP documentation pageを参照してください。

サーバはignore_user_abortディレクティブの設定時に動作します。 false(デフォルト)に設定されている場合は、要求の処理が停止するだけです。 trueに設定されている場合、ユーザーの中止に関する通知を受け取らないため、要求を終了します。

サーバ全体でignore_user_abort = trueを実行することは推奨されません。したがって、php.iniファイルに直接入れることはお勧めしません。しかし、あなたはこのコードをスクリプトの初めに置くことができます。これは、あなたが原子で始まったときにいつも終わらせることが重要です。

ini_set('ignore_user_abort', true); 
+0

完璧!ありがとう!実際には、最近のブラウザでこれを行うのですか? –

+1

はい、現代のブラウザはすべてこれを今日行っています。 – Frodik

関連する問題