我希望在执行睡眠功能之前在浏览器中输出回显(每次)。
以下代码无效
set_time_limit(0);
ob_implicit_flush(1);
ob_start();
echo "Start<Br>";
ob_flush();
for($i=0;$i<10;$i++){
$randSlp=rand(1,3);
echo "Sleeping for ".$randSlp." second. ";
ob_flush();
sleep($randSlp);
}
ob_end_flush();
如果取消注释str_repeat
功能而不是浏览器中的功能
第一次 :
开始
睡了1秒钟。
睡3秒钟。
第二次:睡2秒钟。
睡2秒钟。
并继续......
可以在没有str_repeat()函数的情况下逐个回显,为什么每次都不显示输出。
答案 0 :(得分:11)
尝试以下代码及其工作。
header( 'Content-type: text/html; charset=utf-8' );
header("Cache-Control: no-cache, must-revalidate");
header ("Pragma: no-cache");
set_time_limit(0);
ob_implicit_flush(1);
//apache_setenv('no-gzip', 1);
//ini_set('zlib.output_compression', 0);
//ini_set('implicit_flush', 1);
for ($i = 0; $i < 10; $i++) {
$randSlp=rand(1,3);
echo "Sleeping for ".$randSlp." second. ";;
sleep(1);
if(ob_get_level()>0)
ob_end_flush();
}
答案 1 :(得分:1)
即使输出缓冲区(ob_ *函数)也不一定直接向浏览器提供输出。
首先尝试在flush()
之前或之后调用ob_flush()
。
其次,查看是否打开了mod_gzip或zlib.output_compression。这也将缓冲所有输出。
如果使用IIS服务器而非Apache,则可能还有IIS中的设置需要检查。