我想在後臺運行一個PHP腳本來記錄訪問者信息(在用戶的頁面加載完畢後),這樣它就不會減慢用戶的速度。在後臺運行PHP腳本(不中斷用戶)?
從我發現,有幾個方法來實現這一目標,一個是發射popen
命令,另一種是使用exec
,最後我知道使用fsockopen
(source):
$socket = fsockopen($_SERVER['HTTP_HOST'],80,$errorno,$errorstr,10);
if($socket) {
$socketdata = 「GET /background_script.php HTTP 1.1\r\nHost: 「.$_SERVER['HTTP_HOST'].」\r\nConnection: Close\r\n\r\n」;
fwrite($socket,$socketdata);
fclose($socket);
}
我的服務器不允許使用popen
或exec
,使給我留下了fsockopen
。
這是最適合我的方法嗎?
感謝您的支持(:
編輯:
另一種可能的解決方案,我發現可能是發送Connection: close
瀏覽器停止在客戶端的加載,然後include
的。background_script
這是解決方案推薦
EG:
ob_start();
echo $OUTPUT_DATA;
header("Content-Length: ".ob_get_length());
header('Connection: close');
ob_end_flush();
ob_flush();
flush();
//Do background visitor logging stuff here..
沒有'fsockopen'在這裏不可用。它也會阻止執行。 – TimWolla
這是一個「背景腳本」?在遠程終端返回數據之前,不會「關閉」呼叫阻塞嗎?順便說一句:更好的方法可能是將Javascript發送到執行分析的客戶端(例如Google Analytics腳本)。 – Borealid
只輸出整個頁面,並在完成時調用['flush()'](http://php.net/manual/en/function.flush.php)。只要輸出已經發送到瀏覽器,它就應該被渲染,並且你以後做的任何事情都不會中斷用戶。這種方法的唯一缺點是頁面仍然顯示爲加載 - 但整個事情應該可用。 – DaveRandom