当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(); } }