关闭浏览器可以终止服务器上的PHP脚本吗?

Cli*_*ote 18 php webserver

假设用户单击了一个按钮,导致jquery ajax请求被发送到我的服务器.

服务器开始一个复杂的过程以响应ajax请求.让我们说这个过程需要5分钟才能完成.

与此同时,用户感到无聊并关闭了他的浏览器窗口.

服务器上的脚本是否会继续处理,直到正常时间结束,还是会停止?

如果用户访问网址也是如此,例如example.com/process.php?data=xxx.这将启动process.php,它开始处理数据,并将花费5分钟完成处理.

此处理是否会继续,或者如果用户关闭浏览器,它会停止吗?

(我问,因为我担心这个过程会被完成一半并导致数据损坏).

Arn*_*anc 22

PHP不会注意到浏览器关闭连接,除非它尝试输出某些内容(例如echo).如果输出失败,脚本将被终止,除非ignore_user_abort是On.

因此,只有满足以下条件时脚本才会终止:

  • 脚本尝试输出一些东西(因为脚本不会注意到用户在此之前中止了连接)
  • AND php的ignore_user_abort设置已关闭(如果设置已关闭,如果输出失败,php将终止脚本)

您可以通过启用来避免脚本终止ignore_user_abort.

您可以connection_aborted()随时使用来检查浏览器是否中止了请求.

脚本可能由于其他原因而意外终止(例如,最大执行时间,异常等); 因此您应该使用事务,以便在脚本异常终止时取消半成品更改.