2017-02-25 69 views
2

我手动运行一个PHP数据库维护脚本,需要大约10-15分钟才能完成。如果我的计算机在这段时间内失去了网络连接,那么脚本是否总是在服务器上完全完成,或者它在某个方向停止了吗?如果客户端浏览器丢失或关闭连接,则活动脚本请求是否已完成?

如果确实停止了,是否有任何我可以在PHP或Apache配置中做的事情来防止这种情况发生?

+0

脚本将在服务器上完成。 – mehulmpt

+0

如果脚本仅用于维护,例如备份,然后通过FTP等方式发送备份,那么在可以使用CRON运行的服务器脚本中可能会有更容易的掠夺。我开始使用PHP备份我的MariaDB,并迁移到shell脚本和CRON,这非常完美。在这里看到起点:http:// stackoverflow。com/questions/19664893/linux-shell-script-for-database-backup – Peter

+0

是的,我通常使用Cron,但在极少数情况下需要手动运行这些大脚本 – cronoklee

回答

0

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

当运行PHP命令行脚本,脚本的TTY消失,而无需脚本被终止,则该脚本将尝试写东西,下一次死亡除非ignore_user_abort设置为TRUE

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

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

+0

我将假定这也适用于浏览器脚本作为“命令行脚本”并将此答案标记为正确。感谢大家的意见 – cronoklee

0

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

因此,尽管在向服务器发送请求以执行备份之后关闭浏览器,您仍然可以认为您的任务不会在服务器上被终止。

0

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

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

步骤3:服务器完成脚本的执行。如果执行产生的任何输出必须发送回浏览器,则只有在有活动连接的情况下,响应才会到达目的地。

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

相关问题