如何在linux,cpanel上禁用“header already sent”消息?

时间:2010-01-12 16:33:20

标签: linux php cpanel whm header

我在localhost上构建我的站点(在Windows上运行wamp),当我将它上传到我的服务器时,我总是得到 “无法修改标题信息 - 标题已发送”

据我所知,不应该有任何空白行和任何空白,通常这样做。但现在我需要在发送标题后重定向某人,如何让我的服务器像我的本地主机一样?

我正在使用cpanel和WHM:

cPanel 11.25.0-R42399 - WHM 11.25.0 - X 3.9 CENTOS 5.4 x86_64 virtuozzo on vps

我将不胜感激任何帮助

3 个答案:

答案 0 :(得分:2)

简而言之,您需要阻止PHP在您到达想要使用header()函数的位置之前向浏览器输出任何内容。

这应该通过仔细的编程实践来完成,其中“无空行”是一个,或者将PHP的输出存储在输出缓冲区中,并且只在您准备好它时才输出。

请参阅ob_start()ob_flush()方法。您在应用程序的开头使用ob_start()。这会禁用输出并将其存储到缓冲区中。当您准备好开始输出时,使用ob_flush()并且PHP会将缓冲区的内容发送到浏览器,包括在此之前设置的标头。如果不调用ob_flush(),则在脚本末尾输出(刷新)缓冲区。

它在WAMP开发环境中运行的原因很可能是默认情况下php.ini中已经启用了输出缓冲。这些一体化软件包通常会为前4k字节左右启用默认缓冲区。但是,通常最好在代码中显式启动和刷新缓冲区,因为这会强制更好的编码实践。

答案 1 :(得分:0)

那么, 我想通过更多思考和更好的编程,您可以设法在编写任何HTML之前保留所有重定向。

旧规则解决了这个问题...

答案 2 :(得分:0)

@ user31279:我所知道的最快最肮脏的方法是使用@来抑制警告,例如

@header('Location: some-other-page.php');