當PHP運行在FastCGI模式時,如果有些處理可以在頁面生成完後再進行,就可以使用這個方法.
客戶端響應提前結束,但與此同時服務端腳本卻繼續運行,很適合http協議的異步任務或耗時任務!
下面是封裝的方法,需要的時候執行daemonTask()函數, 參數可選字符串響應:
// 查詢webserver function queryWebServer() { $sapi = PHP_SAPI; $val = null; switch ($sapi) { case 'fpm-fcgi': $val = 'nginx'; break; case 'cgi-fcgi': $val = 'nginx'; break; case 'apache2handler': $val = 'apache'; break; case 'cli': $val = 'cli'; break; default: $val = $sapi; break; } return $val; } // 耗時任務執行 function daemonTask($str = 'wait!') { ini_set("max_execution_time", "0"); $webServer = queryWebServer(); if ($webServer == 'nginx') { echo $str; fastcgi_finish_request(); } else if ($webServer == 'apache') { ob_end_flush(); ob_start(); echo $str; header("Content-Type: text/html;charset=utf-8"); header("Connection: close"); header('Content-Length: ' . ob_get_length()); ob_flush(); flush(); } }