用户中止后,php代码canot停止,直到脚本完成为止

时间:2015-07-13 12:54:35

标签: php curl

我正在用php编写一个网站,有一部分代码需要大量的时间来执行。

由于我不使用线程,当我运行该代码时,整个服务器被它阻止。但没关系。

Hovever,即使我关闭了该网页,它仍会执行并阻止我的服务器。在完成此过程之前,我无法访问我网站的任何页面。

由于执行时间很长,所以我为它设置了一个非常长的set_time_limit(),但是我没有设置ignore_user_abort,所以我认为它不应该在用户中止后运行。或者它是卷曲的问题(代码做了许多卷曲工作)?

有人能告诉我为什么用户关闭连接时php脚本无法停止?或者有一些方法可以确保在用户中止时脚本可以停止?

感谢。

2 个答案:

答案 0 :(得分:0)

从PHP手册:

  

PHP不会检测到用户已中止连接,直到   尝试向客户发送信息。

因此,即使使用ignore user abort,您也必须尝试在脚本内再次与客户端进行交互,以确保它正确中止。请注意,在有问题的页面上有一些关于什么构成“发送信息”的附加说明(例如,Echo本身并不符合资格)。

进一步阅读: http://php.net/manual/en/function.ignore-user-abort.php

答案 1 :(得分:0)

关闭浏览器并不会告诉服务器停止执行某些操作。它没有告诉服务器任何

长时间运行的流程不属于Web应用程序。通常,您需要一些后台任务来处理该过程。 Web应用程序将生成此任务(this似乎是一种可行的方法)或者以某种方式排队处理此任务,后台工作人员将看到该队列(例如每隔X分钟轮询一次的数据库表)一个守护进程)。

目标是在任务运行时不阻止UI。即使用户要打开浏览器,浏览器本身也可以“放弃”#34;过了一会儿或其他什么东西可以在等待太久的时候切断用户的用户体验。让用户调用该进程,但将进程的调用与进程的执行分开,以便用户可以返回到应用程序界面。