【问题标题】:PHP header() function portability [closed]PHP header() 函数可移植性
【发布时间】:2011-12-08 18:00:47
【问题描述】:

我有经典的 Symphony flash 消息实现:

$_SESSION['flash'] = "This is a flash message";
header('location: index.php');

它在两台不同的服务器上运行良好,但在第三台服务器(托管服务器、LAMP 堆栈)上出现奇怪的行为,我不详细了解其中的配置。 在第三台服务器上,脚本执行首先会发出警告 - 标头已经发送......(但我没有输出任何内容,在其他服务器上它可以工作) - 然后如果我再次触发重定向事件,a超链接,它将我带入 index.php 文件并呈现消息。我知道如何通过使用 JavaScript 重定向使其“可移植”,但我想知道这种行为的原因是什么。我怀疑 PHP 或 Apache 模块的服务器配置。 谢谢你的手!

【问题讨论】:

  • 这真的和摘录的代码没什么关系。在第三台服务器上运行的代码的某些部分是不同的。查看它声明标头已发送的位置,它应该给你一个行号。
  • 究竟这两行上面写的是什么?
  • 那么在将脚本放到新服务器之前,您对文件做了哪些更改?您能否向我们展示您在问题中输入的代码块之前的代码?
  • Headers already sent by PHP 的可能重复项
  • @all above: 伙计们,为了简化,你看到的代码在 之间。正如我所提到的,我以前不发送任何东西。三台服务器上的代码相同,所以这不是编程问题。

标签: php function header location


【解决方案1】:

Javascript 不是可移植的解决方案,
但最不便携的解决方案。

未知输出可能是由 BOM 等一些空格引起的。
或者你可以看看headers_sent

【讨论】:

  • 我不想进入关于使用 JavaScript 的 cmets,这不是我的帖子的范围。也没有空格。同样,所有三台服务器上的代码都是相同的。
  • 有三个答案解释有哪些可能性,到目前为止你有什么尝试?因为您对 javascript 的评论无助于解决这个问题(题外话)。您应该将 php 设置包含在您的问题中。
【解决方案2】:

但我想知道这种行为的原因是什么。

这是一个有趣的问题。
事实上,您提到的错误消息已经指出了发生错误的确切行号。只有您需要打开该文件并发现。

大多数 PHP 用户确实低估了错误消息,而大多数时候这些消息包含必不可少的信息,并且通常是问题的唯一关键。

这总是让我感到困惑 - 为什么几乎没有人阅读或至少发布带有他们问题的错误消息?

至于它工作的其他服务器 - 那里有一个输出缓冲。

【讨论】:

    【解决方案3】:

    “标头已发送”错误是由于输出一些内容引起的。包括空格。

    获取传出响应(应该重定向您但没有重定向的页面)并检查其内容。

    您应该只看到错误消息“标头已发送”,没有其他内容。如果您看到其他内容,请修复它。

    <?php 之前或关闭?> 标记之后检查是否存在过多的空格。 最常见的情况是后一种情况(在?> 之后放置 2 个换行符。解析器会忽略一个换行符)。

    要删除这种“错误的可能性”,您只需完全删除结束标记即可。 没必要。

    【讨论】:

    • 我正在标记这个答案,因为它的质量极低。它由不相关或完全错误的陈述组成。可以这么说,在特定问题的上下文中提高错误报告级别是没有意义的。 $a[] = 'b'; 语句永远不会引发错误。整个“session_start 正在关闭标题”的说法是完全错误的——在文档中找不到这样奇怪的声明。
    • @Col.Shrapnel 你就是停不下来,是吗?好的,我将编辑答案以符合标准。
    • @Col.Shrapnel 现在开心吗?
    【解决方案4】:

    第三台服务器是否启用了输出缓冲?

    如果没有,这将解释这一点 - 如果启用缓冲并且您​​没有输出太多,您可能会在请求购买的早期输出空白/html,PHP 将通过确保在之前发送标头来静默处理这个问题输出。禁用缓冲后,无法纠正此问题。

    它应该准确地告诉你是哪个文件/行导致输出开始 - 去那里并确保它没有输出任何东西 - 标签外的空白、错误消息、printecho 等...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-05-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多