PHP 提前输出响应后台继续运行

本文讨论了在PHP中如何实现提前响应并让后台继续执行任务的情况,特别是涉及nginx+fpm和apache的配置。通过示例代码展示了在耗时操作中如何提前输出响应,同时解释了session在其中的影响及可能遇到的锁问题。解决方案是使用session_write_close()函数来结束会话并释放锁。
摘要由CSDN通过智能技术生成

一、问题

浏览器和服务器之间是通过HTTP进行通信的,浏览器发送请求给服务器,服务器处理完请求后,发送响应结果给浏览器,浏览器展示给用户。如果服务器处理请求时间比较长,那么浏览器就需要等待服务器的处理结果。

但是,有时候,浏览器不需要等待服务器的处理结果,只要发送的请求已经被服务器接收到。所以,这种情况下,浏览器希望服务器接收到请求立即返回一个响应,比如字符串'success'。这样浏览器可以继续执行后续代码。

在PHP中,很容易做到。如果服务器使用的是nginx+fpm,可以使用下面的代码:

echo 'success';
fastcgi_finish_request();

// 执行耗时代码.....

如果服务器使用的是apache,可以使用下面的代码:

ob_end_flush();
ob_start();
echo 'success';

header("Content-Type: text/html;charset=utf-8");
header("Connection: close");
header('Content-Length: '. ob_get_length());

ob_flush();
flush();

// 执行耗时代码.....

二、测试

一个静态页面:index.html,代码如下:

<html>
<head><title>测试PHP提前输出响应</title></head>
<body>
<script src="http://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script>
<script>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值