PHP开发        1500141817_242949.png       029fb7e6cf029f422610f4353e9b016e.png



PHP 实现请求结束之后,后台静默执行部分代码

//清除之前的缓冲内容
ob_end_clean();
//设置响应头连接状态为关闭
header("Connection: close");
//设置HTTP请求状态为200 OK
header("HTTP/1.1 200 OK");
//返回数据格式
header("Content-Type: application/json;charset=utf-8");
//打开输出控制缓冲
ob_start();
//返回数据给前端
echo json_encode(['status'=>0, 'msg'=>'暂无可使用的地方']);
file_put_contents('1111.log', '返回给前端:' . date('Y-m-d H:i:s') . PHP_EOL, FILE_APPEND);

//下面输出http的一些头信息
$size = ob_get_length();
//返回输出缓冲区内容的长度
header("Content-Length: $size");
//输出当前缓冲,并关闭缓冲
ob_end_flush();
//输出PHP缓冲
flush();
//前端接收到数据,请求到此结束,之后的代码都在后台静默执行,前端也无法知道执行情况
if (function_exists("fastcgi_finish_request")) { // yii或yaf默认不会立即输出,加上此句即可(前提是用的fpm)
   fastcgi_finish_request(); // 响应完成, 立即返回到前端,关闭连接
}
//设置客户端断开连接时是否中断脚本的执行
ignore_user_abort(true);
//设置请求时间为不限时
set_time_limit(0);
for ($i=0; $i < 100000; $i++) {
   file_put_contents('22.log', $i . '、' . date('Y-m-d H:i:s') . PHP_EOL, FILE_APPEND);
}
file_put_contents('1111.log', '继续执行:' . date('Y-m-d H:i:s') . PHP_EOL, FILE_APPEND);

//冲刷(flush)所有响应的数据给客户端,请求完全结束
fastcgi_finish_request();


 

Aplum

作者  :  Aplum

我依然是我,但不是从前的那个我



评论


关于我

关于我

我不想成为一个庸俗的人。十年百年后,当我们死去,质疑我们的人同样死去,后人看到的是裹足不前、原地打转的你,还是一直奔跑、走到远方的我?

广告

微信图片_20200614142017.jpg