用户离开页面后php执行是否停止?
我想基于一些表单输入运行一个相对耗时的脚本,但我不想求助于cron,因此我想知道通过ajax请求的php页面是否会继续执行直到完成,或者如果用户离开页面,它是否会停止用户离开页面后php执行是否停止?,php,ajax,cron,execution,Php,Ajax,Cron,Execution,我想基于一些表单输入运行一个相对耗时的脚本,但我不想求助于cron,因此我想知道通过ajax请求的php页面是否会继续执行直到完成,或者如果用户离开页面,它是否会停止 在文件末尾进行json编码之前,它实际上不会输出到浏览器,因此在此之前的所有内容是否仍会执行?这取决于您的设置-通常它会停止,但您可以使用它使其继续运行。取决于web服务器和/或PHP的配置,PHP进程可能会,也可能不会,当用户终止HTTP连接时终止线程。如果当用户离开页面时AJAX请求处于挂起状态,则它取决于浏览器在服务器配置(
在文件末尾进行json编码之前,它实际上不会输出到浏览器,因此在此之前的所有内容是否仍会执行?这取决于您的设置-通常它会停止,但您可以使用它使其继续运行。取决于web服务器和/或PHP的配置,PHP进程可能会,也可能不会,当用户终止HTTP连接时终止线程。如果当用户离开页面时AJAX请求处于挂起状态,则它取决于浏览器在服务器配置(不保证)的顶部终止请求(不保证)。不是你想听的答案 我建议在平面文件或数据库中创建一个工作队列,持续运行的数据库可以轮询作业。它不会受到
cron
延迟的影响,但可以将CPU/内存使用保持在可用水平。作业完成后,将结果放入平面文件/数据库中,以便进行AJAX获取。或者承诺在工作完成后给用户发电子邮件(我首选的方法)
希望这会有所帮助,这取决于情况
发件人:
当PHP脚本正常运行时
正常状态为激活状态。如果
远程客户端断开已中止的连接
国旗已打开。遥控器
客户端断开连接通常是由
用户按下停止按钮
你可以决定你是否想要
客户端断开连接导致您的
要中止的脚本。有时是这样
随时运行脚本非常方便
即使没有
接收输出的远程浏览器。
不过,默认行为是针对
当
远程客户端断开连接。这
行为可以通过
ignore\u user\u abort
php.ini指令
以及通过相应的
php\u值忽略用户\u中止
Apache
httpd.conf指令或带有
ignore\u user\u abort()
函数
这似乎表明您的问题的答案是“是的,如果用户离开页面,脚本将终止”
但是,请注意,这取决于所使用的后端SAPI(例如,mod_php
)。如果长时间运行的脚本未发出flush()
,则即使用户已关闭连接,脚本仍可能继续运行
使事情变得复杂的是,即使您定期调用flush()
,启用将导致这些调用陷入陷阱,并且在脚本完成之前不会将它们发送到客户端
更复杂的是,如果您安装了缓冲响应的Apache处理程序(例如,mod_gzip
),那么php将再次检测不到连接已关闭,脚本将继续进行传输
呸。如果客户端/用户/下载程序/查看器中止或断开连接,脚本将一直运行,直到有人尝试刷新客户端的新数据。除非你用过
ignore\u user\u abort()
,脚本将在那里终止。
按照相同的顺序,如果不尝试将任何数据刷新到httpd,PHP无法确定客户机是否仍在那里。找到了我的实际解决方案,它没有终止连接。我的Apache/Php服务器上的会话需要关闭才能启动下一个会话 有一个很大的警告,如果数据无法发送到客户端,
ignore\u user\u abort()。看看我的答案。