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

运行环境:

  • 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);
いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!