2
我目前有一個AJAX請求發送到sendMail.php,它立即關閉連接(使用標頭連接:關閉)並繼續處理大約30秒。通過PHP和Apache2同時連接到單個瀏覽器
但我現在遇到的問題是,當同一客戶端試圖從該服務器加載任何PHP頁面時,它必須等到sendMail.php完成處理。
有沒有辦法解決這個問題?
我正在讀一些其他SO問題,它可能是會話相關的,但我沒有使用任何會話,我甚至嘗試調用session_write_close()在sendMail.php腳本的開始。
實施例的代碼(這是哈克並經完成,但它的工作原理):
//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正常導航。
AJAX是異步的(這是第一個A代表的),所以它不應該阻止瀏覽器的其他活動。 – Barmar
AJAX成功完成(響應碼4,http 200 ok)。當連接強制關閉到瀏覽器時,PHP腳本會繼續,但是來自該瀏覽器的其他輸入響應(即導航到下一頁)將延遲到第一個PHP腳本(sendMail.php)停止。問題在於該特定腳本需要很長時間,並且使用AJAX和強制關閉HTTP循環訪問,但是PHP停止處理該用戶,直到初始AJAX請求實際完成爲止 – Mattisdada
您可以提供一些示例代碼嗎? – shapeshifter