如果客户端浏览器丢失或关闭连接,则活动脚本请求是否已完成?

时间:2017-02-25 14:11:04

标签: php mysql apache http

我手动运行PHP数据库维护脚本,大约需要10-15分钟才能完成。如果我的计算机在此期间丢失了网络连接,脚本是否始终在服务器上完全完成,或者它是否在途中停在某处?

如果它确实停止了,我可以在PHP或apache配置中做些什么来防止这种情况吗?

3 个答案:

答案 0 :(得分:0)

在简单的HTTP请求中,一旦您的浏览器向服务器发出请求,客户端就会等待服务器响应。即使您关闭浏览器,并且服务器正在执行,例如,OS命令,也没关系。服务器将继续这样做,因为服务器必须响应客户端。它并不总是连接到客户端(这里不讨论websockets)。

因此,即使您在向服务器发送请求以执行备份后关闭浏览器,也可以安全地假设您的任务不会在服务器上被杀死。

答案 1 :(得分:0)

查看:http://php.net/manual/en/function.ignore-user-abort.php

  

当运行PHP作为命令行脚本,并且脚本的tty在没有终止脚本的情况下消失时,脚本将在下次尝试写入任何内容时死亡,除非ignore_user_abort设置为的 TRUE

您也可以通过CronJob启动脚本。如果此任务是经常性的,这可能是更好的解决方案。

但在这两个解决方案中,请使用set_time_limit()确保您的max_execution_time不会取消脚本的执行。

答案 2 :(得分:0)

有许多因素促成了脚本的执行。 您的浏览器(作为HTTP客户端)发送某种类型的HTTP请求;服务器接收请求,查找所请求的文件(除了可以在世界上请求文件之外),并开始执行它。而已! 您的浏览器对脚本执行的管理没有任何作用,它只需要某种响应。 无论服务器与客户端的连接如何,执行都将处于活动状态。 步骤1:您的浏览器向服务器发送HTTP请求,请求执行文件。

步骤2:服务器启动执行任务。如果您的脚本在适当的时间内发回请求,浏览器会收到请求,否则浏览器会抛出超时错误/消息。

步骤3:服务器完成脚本的执行。如果执行产生的任何输出必须发送回浏览器,则仅当存在实时连接时,响应才会到达目的地。

注意:必须以更加不同和有效的方式处理,管理和组织这些性能繁重且耗时的任务。