php缓冲区,php执行动态输出进度
之前试过缓冲区,但是有 一个浏览器不行,今天改信息又想用到,调试了半天,查资料,是说输出的字节不够,所以加了一句str_pad('',4096)."\n";就可以了
public function actionPinYin() {
if (ob_get_level() == 0){
ob_start();
}
$zones = Zone::find("alpha=''")->getAll();
$i = 0;
foreach ($zones as $zone){
$py = Helper_Spell::getPinYin($zone->fullname,2);
$zone->spell = $py;
$zone->alpha = substr($py,0,1);
$zone->save();
$i++;
echo $zone->alpha . $zone->name . $zone->spell . "-ok
";
echo str_pad('',4096)."\n";
ob_flush();
flush();
}
ob_end_flush();
exit();
}
echo str_pad('',4096)."\n"; 这一句很重要!
后续来来📅2021年10月12日更新:
这样也行:
$buffer = ini_get('output_buffering');
echo str_repeat(' ',$buffer+1); //防止浏览器缓存
ob_end_flush(); //关闭缓存
for( $i=1; $i<=10; $i++ ){
echo '第 '.$i.' 次输出.'."
\n";
flush(); //刷新缓存(直接发送到浏览器)
sleep(1);
}
echo '输出完毕!';
ob_end_flush(); //关闭缓存
//todo
flush();
再不行多加个:
ob_end_flush(); //关闭缓存
//todo
ob_flush();
flush();
请先登录后再评论登录
1楼
这个挺有意思的
回复