小编典典

用户离开页面后,php执行会停止吗?

ajax

我想基于某种形式的输入运行相对耗时的脚本,但我宁愿不求助于cron,所以我想知道通过ajax请求的php页面是否将继续执行直到完成,或者如果该脚本页面停止,用户离开页面。

它直到文件末尾的json_encode才真正输出到浏览器,那么在此之前的所有内容仍然可以执行吗?


阅读 309

收藏
2020-07-26

共1个答案

小编典典

这取决于。

http://us3.php.net/manual/zh/features.connection-
handling.php:

当PHP脚本正常运行时,NORMAL状态处于活动状态。如果远程客户端断开连接,则ABORTED状态标志将打开。远程客户端断开连接通常是由用户按下STOP按钮引起的。

您可以决定是否希望客户端断开连接以导致脚本中止。有时,即使没有远程浏览器接收到输出,始终将脚本运行至完整状态也很方便。但是,默认行为是当远程客户端断开连接时脚本将中止。可以通过ignore_user_abortphp.ini指令以及相应的
php_value ignore_user_abortApache httpd.conf指令或通过
ignore_user_abort()函数来设置此行为 。

这似乎表示您问题的答案是“是的,如果用户离开页面,脚本将终止”。

但是请意识到,根据所使用的后端SAPI(例如mod_php),php无法检测到客户端已中止连接,直到尝试向客户端发送信息为止。如果长时间运行的脚本没有发出flush(),即使用户已关闭连接,该脚本也可能继续运行。

事情复杂是,即使你 做的
到的问题定期调用flush(),其输出缓冲,将导致捕获这些电话,并直到脚本完成反正不会送他们到客户端!

进一步
复杂化的事情是,如果你已经安装了Apache处理程序缓存的响应(例如mod_gzip),然后再次PHP将无法检测到连接被关闭,该脚本将继续卡车。

ew

2020-07-26