运行环境:
CentOS 7、nginx 1.10、PHP 7.10 (fpm-php FastCGI)
代码如下:
$file = __DIR__.'/timeout.txt';
for ($i = 0; $i < 20; $i++)
{
$fopen = fopen($file, 'a+');
fwrite($fopen, $i.': '.time().PHP_EOL);
sleep(1);
}
fclose($fopen);
测试:
打开浏览器,访问PHP对应的URL
在文件没有全部写完的情况下,快速关闭浏览器
结果:
关闭浏览器后,PHP仍旧在后台执行,直到文件写完
疑问:
如果说关闭不关闭浏览器PHP都会执行,那么自带的函数ignore_user_abort
存在的区别是什么?
是不是只要调用PHP文件后,都会执行到最后才结束
巴扎黑2017-04-11 09:13:21
这是因为php只有在给客户端发送内容的时候才会检测是否客户端断开了连接,否则会一直执行。ignore_user_abort
函数的作用是设置检测到客户端断开后也继续执行。
所以,并不是只要调用就会直到结束。可以执行下下面的代码看看,浏览器断开后确实就终止了
<?php
$file = __DIR__.'/timeout.txt';
for ($i = 0; $i < 20; $i++)
{
// 输出内容给客户端,可以检测到客户端是否已经断开
echo ".";
ob_flush();
flush();
$fopen = fopen($file, 'a+');
fwrite($fopen, $i.': '.time().PHP_EOL);
sleep(1);
}
fclose($fopen);