我有一个PHP脚本可以做到这一点:
$sec = 1;
$id = 1;
while ($sec<20) {
sleep(1);
mysql_query("update test set sec = $sec where id = $id");
$sec++;
}
每当我在浏览器中加载脚本时,即使我在5秒钟后关闭了浏览器窗口,它也会继续运行。如何更改此设置,以便在浏览器窗口关闭时脚本将退出?
你不能。一旦HTTP请求被发送到服务器,PHP脚本将继续执行到最后,即使客户端已经断开连接。
在某些情况下,脚本可能会在打印内容时退出,但由于您没有打印任何内容,它不会退出。
ignore_user_abort(false);
很大程度上取决于Web服务器将向PHP解释器传递什么信息-即使作为CLI运行,PHP也可能只在客户端尝试写入其pty时检测到客户端已中止。
在某些情况下,Web服务器可能会向解释器发送信号。但是PHP没有可靠的方法来检测HTTP连接是否真的已经中止。
但是,考虑到通过HTTP维护长连接所固有的复杂性,这就引出了一个问题,即为什么要创建一个正常发生这种情况的场景。
您可以使用一个会话变量,该变量会在关闭浏览器时销毁,如果不再设置,则可以中断操作。
PHP脚本在web服务器上的进程中运行。简单地关闭浏览器并不一定会终止这个过程。这意味着即使浏览器连接关闭,脚本也可能继续执行。
但是,可以将其配置为不执行此操作。。。
看看的功能
ignore_user_abort();
把它放在脚本的顶部应该会在用户关闭浏览器后阻止它运行
ignore_user_abort(false);
PHP connection_abored()并不总是能正常工作
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();
}