NGINX + PHP-FPM - 如果断开连接,则在 while 循环期间退出脚本

问题描述

我曾尝试使用搜索来获得答案,但到目前为止我似乎找不到任何有效的方法,而且很难向搜索引擎解释我遇到的问题。

我有一个脚本可以读取文件,将其提供给客户端,等待下一个文件可用并提供该文件等。如果文件在一段时间内不可用,它会退出,但是当文件继续存在它等待一段时间(真)循环。

问题是当客户端断开连接时 php 脚本继续在服务器上运行大约 5 分钟后,我尝试了 register_shutdown_function 在它关闭时记录日志,我检查了 connection_aborted() 并检查了 connection_status()在 while 循环中,但都返回运行。我还检查了 php-fpm 状态页面,并确认该进程在连接应该关闭的整个时间内都处于“正在运行”状态。

还尝试使用 top -p PID 检查状态,没有任何异常。

我在这里遗漏了什么吗?我在 nginx 配置中玩过 fastcgi_read_timeout ,但这似乎也没有影响它。

我可以复制它的最简单方法是:

<?php
set_time_limit(0);
while (true) {
    sleep(1);
}

提前致谢!

编辑: 好的,我设法解决了我的问题, 我修改了脚本以执行以下操作,并且成功了!

<?php
set_time_limit(0);
ob_implicit_flush(true);
while (ob_get_level()) {
    ob_end_clean();
}

while (true) {
    sleep(1);
    if (connection_status() != CONNECTION_NORMAL) {
        exit;
    }
}

我想我会为与我有同样问题的其他人编辑并留下代码。我不确定为什么这会修复它,但无论如何它对我有用。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...