我在本地主机上构建我的站点(在 Windows 上运行 wamp),当我将它上传到我的服务器时,我总是得到“无法修改标头信息 - 标头已发送”
我知道不应该有任何空白行和所有内容,通常这会奏效。但是现在我需要在发送标头后重定向某人,我怎样才能让我的服务器像我的本地主机一样?
我正在使用 cpanel 和 WHM:
cPanel 11.25.0-R42399 - WHM 11.25.0 - X 3.9 CENTOS 5.4 x86_64 virtuozzo 在 vps
我将不胜感激
简而言之,您需要阻止 PHP 向浏览器输出任何内容,然后才能使用 header() 函数。
这应该通过仔细的编程实践来完成,其中您的“无空白行”就是其中之一,或者通过将 PHP 的输出存储在输出缓冲区中,并且仅在您准备好时才输出。
请参阅ob_start()和ob_flush()方法。您在应用程序开始时使用 ob_start()。这会禁用输出并将其存储到缓冲区中。当您准备好开始输出时,使用 ob_flush() 并且 PHP 会将缓冲区的内容发送到浏览器,包括在此之前设置的标头。如果您不调用 ob_flush() ,则缓冲区将在脚本末尾输出(刷新)。
它在您的 WAMP 开发环境中运行的原因很可能是在 php.ini 中默认启用了输出缓冲。很多时候,这些一体化软件包会为前 4k 字节左右启用默认缓冲区。但是,通常最好在代码中显式启动和刷新缓冲区,因为这会强制执行更好的编码实践。
@user31279:我所知道的最快和最肮脏的方法是用来@
抑制警告,例如
@header('Location: some-other-page.php');
好吧,我想通过更多的思考和更好的编程,您可以设法在编写任何 HTML 之前保留所有重定向。
旧规则解决了这个问题......