使用ignore_user_abort需要注意的问题

来源:百度文库 编辑:神马文学网 时间:2024/04/29 09:13:42
1.一般来说,使用这个函数都是因为有些比较费时的操作,所以别忘了先设置set_time_limit(0),否则超时后照样会停止的
2.如果在运行中没有输出,那么不管是否用这个函数,php都会运行到底的。因为php每接到一个请求都会运行,而如果运行过程中有输出的话,php就能检测到客户端是否已经断开,如果没有断开,就继续运行;如果断开了,就停止运行了。所以没有输出的话,php会一直运行下去。
看下面代码:
echo "ok";// #1
function sf(){
for ($i = 1; $i <= 10; $i ++){
$a .= ‘‘;
echo ‘ok‘;// #2
sleep(2);
}
$fp = fopen("sf.txt", "wb");
fwrite($fp, $a);
fclose($fp);
}
sf();
echo ‘ok‘;// #3
#1 #2 和#3 都是输出,由于是自上而下运行的,而函数sf才是费时操作,所以只有#2的输出检测到客户端断开的话才能让程序停止。
补充:如果输出的内容很小,则可能会被PHP缓存,这样的话PHP还是检测不到客户端状态的。
所以还要把缓存释放并输出到浏览器
上面的代码还要在前面加上:
ob_end_flush();//或ob_end_clean();(停止缓存)
ob_implicit_flush(true);// 把缓存输出到浏览器
相关链接:
http://www.phpchina.com/bbs/redirect.php?fid=17&tid=16109&goto=nextnewset
http://bbs.chinaunix.net/viewthread.php?tid=732616
http://topic.csdn.net/t/20051122/10/4409559.html