【问题标题】:Why when I'm trying to send headers without sending any output before in PHP it tells me the headers had already been sent? [duplicate]为什么当我在 PHP 之前尝试发送标头而不发送任何输出时,它告诉我标头已经发送? [复制]
【发布时间】:2013-08-06 14:20:24
【问题描述】:

所以我正在尝试使用以下代码更改 PHP 中的标头:

header("HTTP/1.0 404 Not Found");

我收到以下错误消息:

无法修改标头信息 - 标头已由(输出 开始于 路径\index.php:1)

所以我已经阅读了有关此错误的信息,我发现它发生的原因是在我尝试更改标头之前已经发送了一个输出。问题是它告诉我输出是在第 1 行的index.php 中发送的,但该文件的第 1 行是:

<?php

我检查过,&lt; 之前没有空格字符。我什至尝试将文件的第一行更改为:

<?php header("HTTP/1.0 404 Not Found");

但我仍然遇到同样的错误。

为什么会发生这种情况,我该如何解决?

【问题讨论】:

  • 如果你有一个空格,你总是会得到这个错误。空格被视为输出。
  • .htaccess 中是否定义了任何自动前置文件?
  • @JonathanPellerin 这是一个错字,我的意思是有 没有个空白字符。
  • @ØHankyPankyØ 我的服务器是 IIS,所以没有 .haccess,但我无权访问配置文件。你认为它可能来自那里吗?

标签: php header http-headers output


【解决方案1】:

我可能与 BOM 相关。这与您使用的编辑器以及您保存的编码有关。 请检查 UTF-8 BOM signature in PHP files

编辑:

实际上请检查此答案。 How to fix "Headers already sent" error in PHP .. 太棒了。

【讨论】:

  • 所以我查看了您链接到的答案,它说session_start() 也修改了标题信息。事情是session_start() 工作正常,而header() 显示此错误。
  • 顺便说一句,如果不清楚,这个答案没有帮助。我在&lt;?php 之前没有空格字符,并且我已经在使用 Notepad++ 并且我当前的编码没有 BOM。
  • 您是否阅读了第二个链接?因此,如果您创建一个新文件,在一个新项目中,插入标题并阅读它。你得到同样的错误吗?
【解决方案2】:

我不确定是什么导致了这个问题,但最终在我更改了“php.ini”(安装 PDO)并重新启动服务器后,我成功地通过 PHP 更改了标头。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-31
    • 2011-04-17
    • 2016-06-17
    • 1970-01-01
    • 2010-10-17
    • 2023-03-27
    相关资源
    最近更新 更多