Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用户离开页面后php执行是否停止?_Php_Ajax_Cron_Execution - Fatal编程技术网

用户离开页面后php执行是否停止?

用户离开页面后php执行是否停止?,php,ajax,cron,execution,Php,Ajax,Cron,Execution,我想基于一些表单输入运行一个相对耗时的脚本,但我不想求助于cron,因此我想知道通过ajax请求的php页面是否会继续执行直到完成,或者如果用户离开页面,它是否会停止 在文件末尾进行json编码之前,它实际上不会输出到浏览器,因此在此之前的所有内容是否仍会执行?这取决于您的设置-通常它会停止,但您可以使用它使其继续运行。取决于web服务器和/或PHP的配置,PHP进程可能会,也可能不会,当用户终止HTTP连接时终止线程。如果当用户离开页面时AJAX请求处于挂起状态,则它取决于浏览器在服务器配置(

我想基于一些表单输入运行一个相对耗时的脚本,但我不想求助于cron,因此我想知道通过ajax请求的php页面是否会继续执行直到完成,或者如果用户离开页面,它是否会停止


在文件末尾进行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()。看看我的答案。