设为首页 - 加入收藏 - 网站地图 欢迎加QQ群 :14364084
当前位置:谭博的博客 > 编程语言 > php > 正文

php未执行完之前关闭浏览器,php是否能继续执行?

时间:2013-03-03 18:56 来源: 标签: 作者:谭博 阅读:

 

问题:php未执行完之前关闭浏览器,php是否能继续执行?

从php官方网站  http://www.php.net/manual/zh/function.ignore-user-abort.php   获得如下信息  :

在PHP尝试发送信息到客户端之前,不会检测到用户是否已中断连接。 仅使用 echo 语句不能确保信息已发送,参见 flush() 函数。

由此可见,当web服务器接到请求之后,php不会检测到用户是否已中断连接。如果此php程序在执行结束之前没有任何输出内容,程序会完全不顾用户是否已经终止请求,继续执行;如果在结束之前有输出,那么当输出内容大于等于4096个字符时,php会去检查用户的连接状态,如果此时用户已经断开,php就不会执行下面的程序。

程序验证

第一步

<?php
set_time_limit(0);
for($i = 0; $i < 3000; $i ++) {
    file_put_contents( '1.txt', $i );
        if (connection_aborted()) {
        file_put_contents( '1.txt', 'connection_status:' . connection_status() );
        file_put_contents( '1.txt', 'connection_aborted:' );
    }
}

?>

保存文件,用浏览器打开,然后关闭浏览器,观察1.txt,发现1.txt的内容还在不停变换。

第二步

<?php
set_time_limit(0);
for($i = 0; $i < 3000; $i ++) {
    echo str_repeat( ' ', 4069 ); // php只在输出时才检查用户连接状态.
                                // 一些web服务器的output_buffering默认值是4096字符.
                                // 为确保flush()有效, 设置为4069.
    ob_flush();
    flush();
    sleep( 1 );
    file_put_contents( '1.txt', $i );
    if (connection_aborted()) {
        file_put_contents( '1.txt', 'connection_status:' . connection_status() );
        file_put_contents( '1.txt', 'connection_aborted:' );
    }
}

?>

保存文件,用浏览器打开,然后关闭浏览器,观察1.txt,发现1.txt的内容停止变换。

相关文章 : 关闭浏览器后,php脚本会不会继续运行

 

关注微信公众号

微信扫一扫,打赏我

热评文章
    内容不错,支持一下
    评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)