搜尋

首頁  >  問答  >  主體

请问PHP从执行到结束,根据什么来决定的

运行环境:

代码如下:

$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. 在文件没有全部写完的情况下,快速关闭浏览器

结果:

疑问:

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

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

PHPzPHPz2773 天前308

全部回覆(1)我來回復

  • 巴扎黑

    巴扎黑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);
    

    回覆
    0
  • 取消回覆