假设用户单击了一个按钮,导致jquery ajax请求被发送到我的服务器.
服务器开始一个复杂的过程以响应ajax请求.让我们说这个过程需要5分钟才能完成.
与此同时,用户感到无聊并关闭了他的浏览器窗口.
服务器上的脚本是否会继续处理,直到正常时间结束,还是会停止?
如果用户访问网址也是如此,例如example.com/process.php?data=xxx.这将启动process.php,它开始处理数据,并将花费5分钟完成处理.
此处理是否会继续,或者如果用户关闭浏览器,它会停止吗?
(我问,因为我担心这个过程会被完成一半并导致数据损坏).
Arn*_*anc 22
PHP不会注意到浏览器关闭连接,除非它尝试输出某些内容(例如echo).如果输出失败,脚本将被终止,除非ignore_user_abort是On.
因此,只有满足以下条件时脚本才会终止:
ignore_user_abort设置已关闭(如果设置已关闭,如果输出失败,php将终止脚本)您可以通过启用来避免脚本终止ignore_user_abort.
您可以connection_aborted()随时使用来检查浏览器是否中止了请求.
脚本可能由于其他原因而意外终止(例如,最大执行时间,异常等); 因此您应该使用事务,以便在脚本异常终止时取消半成品更改.