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

  • Post author:
  • Post category:php


从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的内容停止不变。