0

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

我知道不应该有任何空白行和所有内容,通常这会奏效。但是现在我需要在发送标头后重定向某人,我怎样才能让我的服务器像我的本地主机一样?

我正在使用 cpanel 和 WHM:

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

我将不胜感激

4

3 回答 3

2

简而言之,您需要阻止 PHP 向浏览器输出任何内容,然后才能使用 header() 函数。

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

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

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

于 2010-01-12T18:15:20.550 回答
0

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

@header('Location: some-other-page.php');
于 2011-03-22T17:13:00.920 回答
0

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

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

于 2010-01-12T18:01:56.737 回答