执行结束前发送标头

时间:2013-12-19 03:19:17

标签: php http-headers output flush bluehost

在我的开发服务器(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,但没有运气。关于为什么会发生这种情况的任何想法?

1 个答案:

答案 0 :(得分:0)

如果您使用ob_implicit_flush(true);,则无需拨打flush();,但必须使用 ob_flush();

使用ob_flush();从应用程序启动的缓冲区中提取数据PHP内部有CGI缓冲区,ob_implicit_flush(true);将打开隐式刷新,它不使用CGI缓冲区并使用应用程序启动的缓冲区。

所以一旦你使用ob_implicit_flush(true);然后你必须使用ob_flush();

我希望这会有所帮助。