在我的开发服务器(CentOS 6.3,PHP 5.3)上,这很好用:
ignore_user_abort(true);
header('Location: http://test.hooshmarketing.com/tools/test/test_pretty_output.php');
//here a long script keeps executing in the background a few seconds
这也很好用
ob_implicit_flush(true);
echo "foo"; //I see foo on the browser and...
sleep (15);
echo "bar"; //... about 15 seconds later I see bar on the browser
和这个
ob_start();
echo "foo"; //foo is written...
sleep(10);
ob_flush(); //...about 10 second later, foo is sent
echo "bar"; //bar is written...
sleep(10);
ob_end_flush(); //...about 10 second later, bar is sent
在我的承包商的生产服务器(bluehost PHP 5.2共享主机)上,这三个示例都不起作用。在脚本完成执行之前,不会向客户端发送任何内容。我尝试在脚本文件夹的php.ini文件中设置ini_set('output_buffering', '0')
和output_buffering = Off
,但没有运气。关于为什么会发生这种情况的任何想法?
答案 0 :(得分:0)
如果您使用ob_implicit_flush(true);
,则无需拨打flush();
,但必须使用 ob_flush(); 。
使用ob_flush();从应用程序启动的缓冲区中提取数据PHP内部有CGI缓冲区,ob_implicit_flush(true);将打开隐式刷新,它不使用CGI缓冲区并使用应用程序启动的缓冲区。
所以一旦你使用ob_implicit_flush(true);然后你必须使用ob_flush();
我希望这会有所帮助。