【问题标题】:PHP headers not working [duplicate]PHP标头不起作用[重复]
【发布时间】:2012-08-08 19:42:59
【问题描述】:

可能重复:
Headers already sent by PHP

“无法修改标头信息 - 标头已发送”

自从将我的 MacBook Pro 更新到 OS X Mountain Lion 后,我的 localhost 网站一直出现故障。

我的大部分(如果不是全部)header("Location: ./xxx.php"); 重定向都没有工作。他们在 Lion 工作,所以我假设 Mountain Lion 是导致此问题的原因,而不是我的代码。如果我关闭内置服务器并启用/使用 MAMP,也会发生错误。

这让我相信,Mountain Lion 整体处理头球的方式存在问题。如果这个错误实际上是我的代码,那么为什么它在 Lion 中起作用?如果是这种情况,我会假设 Mountain Lion 以更严格的方式读取 PHP 代码。此外,然后我制作了一个带有标头重定向的简单 test.php 脚本,以查看标头是否正常工作。事实证明,当我在 Safari 中打开该脚本时,它毫无问题地重定向了我。这个错误对我来说似乎很奇怪,我想要一些反馈。谢谢。

【问题讨论】:

  • 一旦发送输出,您就不能发送标头。错误说明了一切
  • “请记住,必须在发送任何实际输出之前调用 header()”php.net/manual/en/function.header.php
  • 也许您在 PHP 文件中意外添加了一个空格作为第一个字符或类似的东西,这会破坏它。
  • 抓取 Firebug 或其他一些调试工具。我认为可能是新的 php 配置导致在您到达 header() 代码之前发送一些东西,所以如果您知道它是什么,那么您将有更好的机会找到导致它的原因。
  • “那为什么它在 LION 中工作??” - 你重新安装了 MAMP 吗? MAMP 是否加载与以前相同的 php.ini?您是否可能在更新之前编辑过文件并且实际上之前没有对其进行测试?你真的不能责怪操作系统更新破坏了该级别的非操作系统应用程序。

标签: php http-headers


【解决方案1】:

Cannot modify header information - headers already sent 表示您正在尝试在数据已发送时发送标头。这是不可能的。

如果您需要调试您的应用程序,请将您的 header('Location: ...) 替换为简单的 exit; 并检查您是否有任何输出。在您的header() 调用之前搜索任何echoprint...。

【讨论】:

  • 在更新到 OSX ML 之前,它可以在内置服务器和 MAMP 上运行。我总是一次只打开一个。不,在标头以回显/打印的形式重定向之前没有输出。在 session_start()/sessions 下方的顶部附近有一些带有文档类型的
    标签,但我不知道这是否足以破坏脚本。 html 的东西不在 PHP 标记中。
  • 如果您愿意,我可以发布我的登录脚本,这是我遇到此问题的脚本之一。
  • @user1585762 “一些
    标签”被认为是输出。在您的浏览器或控制台中可见的任何内容都被视为输出。
  • 有办法解决这个问题吗?也许一个 php.ini 文件改变了它如何处理输出下的标题?它在 Lion 之前工作,所以我猜这要么是一个错误和/或一个 php.ini 设置(很高兴有)
  • @user1585762 在php.ini 中是。我之前给你发了设置的链接。如果您使用重定向,它需要是安全的。使用元刷新几乎是安全的,因为它仍然会加载您要保护的页面。最好的办法是修复您的代码并将您的 header() 移动到它们所属的位置:在实际输出之前。
猜你喜欢
  • 2010-09-30
  • 2017-09-18
  • 2016-08-21
  • 2015-12-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多