从php官方网站
http://www.php.net/manual/zh/function.ignore-user-abort.php
获得如下信息 :
在PHP尝试发送信息到客户端之前,不会检测到用户是否已中断连接。 仅使用 echo
语句不能确保信息已发送,参见
由此可见,当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:’ );
}
}
>
[/php]
保存文件,用浏览器打开,然后关闭浏览器,观察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:’ );
}
}
>
[/php]
保存文件,用浏览器打开,然后关闭浏览器,观察1.txt,发现1.txt的内容停止不变。