PHP 先返回结果到前端,PHP代码继续执行后续的任务

PHP中,在客户端发出请求触发脚本执行,然后在服务器端执行一段代码,页面关闭了也要继续执行,并且要先返回一些状态给客户端,避免前端等待超时。

/**************** 1 返回给前端结果之前的操作 ****************/
/**************** 2 告诉前端结果,告诉浏览器操作成功,但继续运行php ****************/
ob_end_clean();
ob_start();    
//Windows服务器需要加上这行。
echo str_repeat(" ",4096);//windows
// echo str_repeat(' ', 65536); //linux
//-----------------------------------------------------------------------------------
_ajaxReturntwo(200,'操作成功');//返回结果给ajax
//-----------------------------------------------------------------------------------
$size = ob_get_length();

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(); // 响应完成, 立即返回到前端,关闭连接
}

ignore_user_abort(true);//在关闭连接后,继续运行php脚本
set_time_limit(0); //no time limit,不设置超时时间(根据实际情况使用)
/**************** 2 告诉前端结果,告诉浏览器完成,但继续运行php ****************/
/**************** 3 继续运行php ****************/
sleep(20);
/*
  休眠PHP,也就是当前PHP代码的执行停止,20秒钟后PHP被唤醒,
  PHP唤醒后,继续执行下面的代码,但这个时候上面代码的结果已经输出浏览器了,
  也就是浏览器从HTTP头中知道了服务端关闭了连接,浏览器将不在等待服务器的响应,
  反应给客户的就是页面不会显示处于加载状态,换句话说用户可以关掉当前页面,或者关掉浏览器,
  PHP唤醒后继续执行下面的代码,这也就实现了PHP后台执行的效果,
  休眠的作用只是让php先把前面的输出作完,不要急于马上执行下面的代码,休息一下而已,也就是说下面的代码
  执行的时候前面的输出应该到达浏览器了
*/
.......继续写功能的逻辑





function _ajaxReturntwo($code, $msg, $data=array())
{
    $data = is_null($data) ? array() : $data;
    $data = array(
        "code" => $code,
        "msg" => $msg,
        "data" => json_encode($data)
    );
    header('Cache-Control:no-cache,must-revalidate');
    header('Pragma:no-cache');
    header('Content-Type:application/json; charset=utf-8');
    header("Access-Control-Allow-Origin: *");
    header("Access-Control-Allow-Headers:x-requested-with,content-type");
    echo json_encode($data);
}

 

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值