为什么在Chrome中,当我执行PHP脚本时点击“停止”按钮,它不会停止执行?即使关闭TAB也不会阻止它。 ignore_user_abort()
是false
。关于如何强制PHP停止的任何想法?得到大脚本,制作一些大文件并执行10分钟......
答案 0 :(得分:0)
用户无法停止PHP脚本。由于PHP在调用页面时在服务器上运行,因此除非脚本中的条件符合您的喜好,否则无法停止它。
答案 1 :(得分:0)
正如我在评论中提到的,this answer对上一个问题有很多信息。
但可能是你的问题有一个问题:PHP可能不知道它在尝试发送数据之前已断开连接并被拒绝,请参阅the docs中的这一点:
下次脚本尝试输出内容时,PHP会检测到连接已中止
因此,根据您所需的输出,您可能会发送某种心跳"心跳"数据到浏览器,如果用户断开连接将触发中止。如果它似乎没有发送,请尝试使用flush()
进行一些明确的缓冲区清除。如果您(或您的框架)正在使用输出缓冲,您可能需要解决它。
如果你不能这样做(如果你正在生成输出文件或其他类似的东西),你可能不得不重新安排事情,因为PHP无法知道连接已关闭。我的建议是使用一个排队系统将事物的生成卸载到一个单独的脚本,然后你可以手动取消/杀死 - 这里是good overview of queueing systems,我个人使用带有PHP的beanstalkd - 它' s简单,容易,出色地工作,并有一些很好的PHP库(我使用过pheanstalk和davidpersson's beanstalk)。无论何时你生成这样的大文件,你都应该使用排队系统。