buffer边执行边输出

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
header('Content-Type: text/html;charset=utf-8');
echo str_pad("", 1000); //输出1000个空格
echo 'begin...<br>';
ob_flush();
flush();
for ($i = 0; $i < 10; $i++) {
echo 'loading ' . $i . '0%<br>';
if (connection_aborted()) {
exit;
}
ob_flush();
flush();
sleep(1);
}

echo 'ok';

此方法必须要关闭output_buffering,即 output_buffering = off,但是貌似通过ini_set(‘output_buffering’, ‘Off’)设置的无效,有点奇怪.

更新一种新的方法,直接使用即可,无需操作php.ini

1
2
3
4
5
6
7
8
set_time_limit(10); 
ob_end_clean(); //在循环输出前,要关闭输出缓冲区
echo str_pad('',1024); //浏览器在接受输出一定长度内容之前不会显示缓冲输出,这个长度值 IE是256,火狐是1024
for($i=1;$i<10;$i++){
echo $i.'<br/>';
flush(); //刷新输出缓冲
sleep(1);
}