我通过ajax调用php脚本来进行一些数据库维护。如果用户关闭页面,点击或点击链接,php脚本是否会完全执行?有办法吗?
也许如果php脚本调用了exec()
方法或类似的东西,它会依次通过控制台调用脚本:
$ php /var/www/httpdocs/maintenance.php
答案 0 :(得分:15)
这是竞争条件。 PHP将在某些时候(通常在尝试输出时)检测到Apache正在大吼大叫,远程用户已经关闭了连接。您是否想要在此处完成所有操作取决于代码的结构。
如果要在脚本自行关闭之前确保所有操作都已完成,请使用ignore_user_abort(TRUE)
,这会在断开连接后保持PHP运行。它仍受用户max_execution_time限制和诸如此类的限制,但由于您已断开连接,因此不会关闭。
答案 1 :(得分:14)
只要用户代理(浏览器等)已完全发送请求,服务器就会完成所有需求并完成请求并尝试发送回复。
事实上,这种“ping”行为通常用于“心跳”式进程,使服务保持温暖或执行定期维护。
答案 2 :(得分:2)
一旦Web请求进入您的服务器,用户关闭浏览器或导航就无所谓了。您的服务器仍会响应,但没有人会听取响应。
答案 3 :(得分:1)
在设置,Web服务器,操作系统等方面有所不同。
通常,请求将照常处理,并且永远不会读取响应。有时,写入可能会提前失败,并且请求在处理时失败。
答案 4 :(得分:0)
一旦ajax呼叫启动,用户可以随心所欲地做任何事情。如果他们关闭页面,他们就不会从ajax调用中获得反馈(如果有的话)。
答案 5 :(得分:0)
如果php开始执行,那么无论用户是关闭窗口还是导航离开页面,它都会继续执行。
答案 6 :(得分:0)
无论浏览器状态如何,php脚本都将完成。 php在服务器上解析,而不关心客户端是否仍然打开。
答案 7 :(得分:0)
如果HTTP请求已完成,那么即使客户端的计算机已关闭,PHP脚本也将完全执行。