【问题标题】:How to resolve Warning "Cannot modify header information" in page redirect [duplicate]如何解决页面重定向中的警告“无法修改标题信息”[重复]
【发布时间】:2012-11-30 10:28:31
【问题描述】:

可能重复:
“Warning: Headers already sent” in PHP

我有 以下代码在顶部执行 301 重定向,没有任何空格,并且此代码上方没有任何内容,但它给出了错误,

Warning: Cannot modify header information - headers already sent by

<?php
   require_once('../../config.php');
   header("HTTP/1.1 301 Moved Permanently");
   header("location: http://www.myapp.com/courses/mycourse-new.php");
?>

我尝试使用 ob_start,但没有成功。我已经为许多文件做了 301 没有任何问题。如何解决这个问题。

【问题讨论】:

  • 注释掉required_once时还有消息吗?
  • 如果这里没有空格,那么config.php 可能有...
  • 您使用 PHP4 是否有特殊原因(自 2008 年以来不再支持)?

标签: php http-headers http-status-code-301 php4


【解决方案1】:

确保在您的文件和包含的文件中,&lt;?php 之前绝对没有输出字符(甚至没有空格或换行符)。

【讨论】:

  • 只是添加了 Gerald Schneider 所说的内容......请注意,这个输出字符甚至意味着 之前的空格
【解决方案2】:

您是否在代码的第一行(html 标记之前)使用了ob_start()

【讨论】:

  • 我知道,但要看他需要什么
【解决方案3】:

您可以禁用输出缓冲

ini_set('output_buffering', 0);

在你的 PHP 文件或设置中

output_buffering = Off

在 php.ini 中,一切都会正常工作。

【讨论】:

    【解决方案4】:

    【讨论】:

      【解决方案5】:

      使用ob_start() 喜欢...

      `<? 
             ob_start();
             require_once('../../config.php');
             header("HTTP/1.1 301 Moved Permanently");
             header("location: http://www.myapp.com/courses/mycourse-new.php");`
      

      Ob_start 将缓冲所有输出,直到脚本 exit() 和缓冲区释放。要使用标头重定向,不应已发送任何其他标头。

      或者,如果您之前有空间,您可以更改

      【讨论】:

      • 使用输出缓冲区来消除症状是一种令人讨厌的黑客行为,它并不能解决问题的原因。
      • 但在用户必须快速修复大型源代码的问题直到他/她找到确切问题之前很有帮助。
      • 如果你使用这个“快速修复”,你将永远找不到问题
      猜你喜欢
      • 2011-10-21
      • 1970-01-01
      • 2018-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-28
      • 2014-03-07
      相关资源
      最近更新 更多