我有一个执行此操作的PHP脚本:
$sec = 1;
$id = 1;
while ($sec<20) {
sleep(1);
mysql_query("update test set sec = $sec where id = $id");
$sec++;
}
每当我在浏览器中加载脚本时,即使我在5秒后关闭浏览器窗口,它也会继续运行。如何在浏览器窗口关闭时更改此设置,脚本将退出?
答案 0 :(得分:5)
你做不到。一旦HTTP请求被发送到服务器,即使客户端断开连接,PHP脚本也将继续执行到它的结束。
在某些情况下,脚本会在打印内容时退出,但看到您没有打印任何内容,它就不会退出。
答案 1 :(得分:1)
ignore_user_abort函数设置客户端断开连接是否应中止脚本执行。您需要在脚本的beginnig中添加它
ignore_user_abort(false);
答案 2 :(得分:1)
很大程度上取决于Web服务器将哪些信息传递回PHP解释器 - 即使作为CLI运行,PHP也可能只检测到客户端在尝试写入其pty时已中止。
在某些情况下,网络服务器可能会向解释器发送信号。但是,PHP没有可靠的方法来检测HTTP连接是否真的已经中止。
但是,由于维持HTTP上的长连接所固有的复杂性,它更倾向于为什么要创建一个正常发生的场景的问题。
答案 3 :(得分:0)
您可以使用在关闭浏览器时销毁的会话变量,如果不再设置,则可以中断操作。
答案 4 :(得分:0)
PHP脚本在您的Web服务器上运行。简单地关闭浏览器不一定会终止此过程。这意味着即使浏览器连接已关闭,您的脚本也可能继续执行。
但可以配置为不执行此操作...
查看功能
ignore_user_abort();
将它放在脚本的顶部应该在用户关闭浏览器后停止运行
ignore_user_abort(false);
答案 5 :(得分:0)
PHP connection_aborted() Does not always works
TCP要求客户端确认所有已发送的数据包,因此服务器应至少将此检测为发送超时...
session_write_close();//to make flush work
while (connection_status() !== 0) {//this will work if the connection is properly shutdown
//or if it is simply disconnected...
sleep(1);
echo "whatever";
ob_flush();
flush();
}