怪我咯2017-04-10 17:13:321楼
PHP在发送信息给客户端时,才能检测连接是否已经中断.
http://php.net/manual/zh/function.ignore...
php.ini中ignore_user_abort默认是Off,不忽略用户的中断,也就是客户端断开连接后,脚本将被中止.
在PHP尝试发送信息到客户端之前,不会检测到用户是否已中断连接.
仅使用echo语句不能确保信息已发送,参见flush()函数.
info.php
for($i=0;$i<5;$i++) {
sleep(1);
}
file_put_contents('/tmp/info.txt', $i);
测试:
time curl http://127.0.0.1/info.php
Ctrl+C中断请求(PHP-FPM)最后还是生成了文件info.txt.
因为该请求没有输出,PHP无法检测用户是否已中断连接.
PHP在发送信息给浏览器时,才能检测连接是否已经中断.
比如执行这段代码,在5秒内中断请求,将不会生成文件info.txt:
for($i=0;$i<5;$i++) {
echo $i;
ob_flush();
flush();
sleep(1);
}
file_put_contents('/tmp/info.txt', $i);