首先通过ignore_user_abort(true)和set_time_limit(0)设置允许脚本持续运行,再利用connection_aborted()函数检测客户端是否断开连接,若返回true则终止后续操作,避免资源浪费。

在使用PHP进行实时输出时,比如通过flush()和ob_flush()向浏览器持续推送数据,经常会遇到一个关键问题:如何检测客户端是否已经关闭连接?如果不能及时感知客户端断开,脚本可能继续执行无用操作,浪费服务器资源。
启用连接状态检测
PHP提供了内置机制来判断客户端连接状态。首先要确保配置允许检测:
ignore_user_abort:设置为 On 可让脚本在用户关闭浏览器后继续运行(默认通常为 Off) set_time_limit:避免脚本因超时中断,可设为0表示不限时
示例设置:
ignore_user_abort(true);
set_time_limit(0);
使用 connection_aborted 检测断开
在输出循环中定期调用 connection_aborted() 函数,它会返回客户端是否已断开:
立即学习“PHP免费学习笔记(深入)”;
while (@ob_end_flush()) { } // 清空缓冲区
flush();
for ($i = 1; $i echo “数据 {$i}n”;
flush();
sleep(1);
if (connection_aborted()) {
break;
}
}
一旦检测到断开,即可终止后续处理。
结合 connection_status 判断连接状态
除了 connection_aborted(),还可以使用 connection_status() 获取更详细的连接状态:
0: CONNECTION_NORMAL(正常) 1: CONNECTION_ABORTED(用户中止) 2: CONNECTION_TIMEOUT(超时)
可通过位运算判断异常:
if (connection_status() !== CONNECTION_NORMAL) {
// 客户端断开或超时
exit;
}
实际应用场景建议
适用于长时间运行的输出任务,如日志流、进度反馈、实时通知等。建议在每次输出后插入状态检查:
合理设置输出缓冲:@ob_end_flush() 确保内容即时发送 加入 sleep 或 usleep 控制输出频率 关键业务逻辑前务必检查连接状态
基本上就这些。只要在输出循环中加入连接检测,就能有效避免无效运行。
以上就是PHP实时输出如何处理客户端关闭_PHP实时输出检测客户端关闭的详细内容,更多请关注php中文网其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1326052.html
微信扫一扫
支付宝扫一扫