如果用户在 AJAX 请求结束之前退出浏览器或更改页面,会发生什么情况
我在ajax上调用php脚本来做一些数据库维护。如果用户关闭页面,回击或单击链接,php脚本是否会完全执行?有没有办法做到这一点?
也许如果php脚本调用了该方法或类似的东西,那么它将通过控制台调用脚本,如下所示:exec()
$ php /var/www/httpdocs/maintenance.php
?
我在ajax上调用php脚本来做一些数据库维护。如果用户关闭页面,回击或单击链接,php脚本是否会完全执行?有没有办法做到这一点?
也许如果php脚本调用了该方法或类似的东西,那么它将通过控制台调用脚本,如下所示:exec()
$ php /var/www/httpdocs/maintenance.php
?
这是一个竞争条件。PHP会在某个时候(通常在尝试输出时)检测到Apache当着它的面大喊大叫,远程用户已经关闭了连接。您想做的所有事情是否都在那时完成取决于您的代码的结构。
如果要确保在脚本自行关闭之前完成所有操作,请使用ignore_user_abort(TRUE),
它在连接断开后保持PHP运行。它仍然受用户max_execution_time限制等限制的约束,但它不会因为您断开连接而关闭。
只要用户代理(浏览器等)已经完全发送了请求,服务器就拥有了它所需要的一切,并将完成请求并尝试发回响应。
实际上,这种“pinging”行为通常用于“检测信号”类进程,这些进程使服务保持温暖或执行定期维护。