请问PHP从执行到结束,根据什么来决定的
PHPz
PHPz 2017-04-11 09:11:21
0
1
266

运行环境:

  • 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);

测试:

  1. 打开浏览器,访问PHP对应的URL

  2. 在文件没有全部写完的情况下,快速关闭浏览器

结果:

  • 关闭浏览器后,PHP仍旧在后台执行,直到文件写完

疑问:

  1. 如果说关闭不关闭浏览器PHP都会执行,那么自带的函数ignore_user_abort存在的区别是什么?

  2. 是不是只要调用PHP文件后,都会执行到最后才结束

PHPz
PHPz

学习是最好的投资!

全部回覆(1)
巴扎黑

这是因为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);
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!