現在、AJAX リクエストが sendMail.php に送られています。(ヘッダーConnection: Closeを使用して) すぐに接続を閉じ、約 30 秒間処理を続けます。
しかし、私が今経験している問題は、同じクライアントがそのサーバーから PHP ページを読み込もうとすると、sendMail.php の処理が完了するまで待たなければならないことです。
これを回避する方法はありますか?
セッションに関連している可能性がある他のSOの質問を読んでいましたが、セッションを使用していないため、 sendMail.php スクリプトの開始時にsession_write_close()を呼び出してみました。
サンプルコード (これはハックでやり過ぎですが、動作します):
//File: SendMail.php
//error_reporting(E_ALL);
error_reporting(0);
session_write_close();
set_time_limit(0);
ignore_user_abort(1);
ignore_user_abort(true);
ini_set('ignore_user_abort','1');
apache_setenv('no-gzip', 1);
apache_setenv('KeepAlive',0);
ini_set('zlib.output_compression', 0);
ini_set('output_buffering', 0);
$size = ob_get_length();
// send headers to tell the browser to close the connection
header("Content-Length: $size");
header('Connection: Close');
// flush all output
ignore_user_abort(true);
ob_end_flush();
ob_flush();
flush();
sleep(30);//The real code has more stuff, but just for example lets just say it sleeps for 30 seconds
参考資料の残りの部分は、GET による通常のナビゲーションです。