**
PHP如何在关闭页面后停止运行
最近需要写一个程序,打开浏览器时使用PHP持续发送udp消息,关闭浏览器停止发送,以下是我发送部分代码:
$interval = 10;
do{
send_udp_message($host,$port,json_encode($clientinfo));
sleep($interval);
}while(true);
但随之出现的问题是,打开浏览器运行30秒后死循环会自动停止,查了资料后发现这是因为PHP有一个超时的问题,具体超时问题https://www.jb51.net/article/79562.htm有详细讲解,为了解决超时问题,一般是加上set_time_limit(0);
让程序一直执行下去,如果想忽略浏览器的关闭,让程序一直执行,可加上ignore_user_abort(true);
忽略浏览器关闭的影响,但我只使用set_time_limit(0);
,关闭浏览器后程序居然还是在一直执行!这就让我很费解了,明明说的是浏览器关闭后客户端会给服务器一个abort让php停止运行,这说明php应该还没有得到abort。
又经过各种搜索,才发现是因为我没有刷新,清楚缓存,所以php服务器的状态没有更新到接收abort的状态,需要加上flush()和ob_flush()清楚缓存区,才能更新带最新的状态。以下是最终解决后的完整代码:
do{
flush();
ob_flush();
send_udp_message($host,$port,json_encode($clientinfo));
sleep($interval);
}while(true);