PHP返回前端后继续执行后台任务
以下代码可以实现在php中立即返回前端结果,然后在后台继续执行耗时比较长的任务,提升前端的响应速度。
<?php $rs = array('code' => 0, 'msg' => 'ok', 'data' => true); ob_end_clean(); ob_start(); //----------------------------------------------------------------------------------- //Windows服务器需要加上这行。 //echo str_repeat(" ",4096); echo json_encode($rs);//返回结果给ajax //----------------------------------------------------------------------------------- // get the size of the output $size = ob_get_length(); // send headers to tell the browser to close the connection header("Content-Length: $size"); header('Connection: close'); header("HTTP/1.1 200 OK"); header("Content-Type: application/json;charset=utf-8"); ob_end_flush(); if(ob_get_length()) ob_flush(); flush(); if (function_exists("fastcgi_finish_request")) { // yii或yaf默认不会立即输出,加上此句即可(前提是用的fpm) fastcgi_finish_request(); // 响应完成, 立即返回到前端,关闭连接 } /******** background process starts here ********/ ignore_user_abort(true);//在关闭连接后,继续运行php脚本 /******** background process ********/ set_time_limit(0); //no time limit,不设置超时时间(根据实际情况使用) /******** Rest of your code starts here ********/ //继续运行的代码 echo '我是不会被输出的!!但是后端操作会继续'; file_put_contents('1.txt',time()); sleep(30);//延迟30 file_put_contents('2.txt','关闭网页30s后创建此文件'.time());
实测后面的echo内容并不会被输出,但是1.txt这个文件确实已经被创建。并且在浏览器网页关闭后30s成功创建2.txt成功!
基于互联网精神,在注明出处的前提下本站文章可自由转载!
本文链接:https://ranjuan.cn/php-run-background/
赞赏
微信赞赏支付宝赞赏
发表评论