【问题标题】:Why is this code not throwing "Header already Sent" error? [duplicate]为什么这段代码没有抛出“标头已发送”错误? [复制]
【发布时间】:2018-03-22 20:09:27
【问题描述】:

PHP 文档说:

  • "请记住,必须在发送任何实际输出之前调用header(),无论是通过普通 HTML 标记、文件中的空白行还是从
    PHP。”

  • " 这要求您在拨打任何电话之前拨打setcookie() 输出,包括和标签以及任何空格。”

我了解上述要求的重要性,但是下面的代码如何运行而不抛出 "Headers already Sent" 错误?

          <html>
          <body>
          <h1>Hey</h1>
          
          <?php
              echo "Hello";
              setcookie("hey","hellocookie");
              //header("Pragma: no-cache");
              //echo $_COOKIE['hey'];
              header('Location: http://www.example.com/');
          ?>
          </body>
          </html>

header('Location: http://www.example.com/'); 无需投掷即可工作 错误。此外,setcookie("hey","hellocookie"); 工作,即使 在它之前有一个输出echo "Hello";。 我用echo $_COOKIE['hey']; 对其进行了测试,它确实打印了 heycookie.

*注意:在 Localhost/Xampp 上运行上述脚本。错误报告未禁用。如果我错过了其中一个分号,我确实会在浏览器输出上收到错误。 *

【问题讨论】:

  • 您可能禁用了错误报告。您可能启用了输出缓冲。
  • 确实会打印其他错误,所以我猜错误报告没有被禁用。如何检查是否启用了输出缓冲?
  • 如果phpinfo() 某处...
  • 这个问题怎么是重复的?我不是要修复它。我只想知道这段代码是如何工作的,尽管它不符合要求。事实上,我没有要修复的错误......
  • 有人能解释一下这个问题是如何与劳伦斯提出的问题重复的吗? ://

标签: php xampp http-headers setcookie


【解决方案1】:

在发送任何类型的输出之前必须使用任何与标头一起使用的函数...即使是单个空格也会引发此类 PHP 错误。

PHP header() documentation

【讨论】:

  • 即使header("Pragma: no-cache"); 也能正常工作。
  • 我在代码中添加了ini_set('display_errors', 1); ini_set('display_startup_errors', 1); error_reporting(E_ALL);,但仍然没有出错。
  • 确保您的网络服务器有完整的错误报告,即 E_ALL 甚至在您的配置文件中。它会触发PHP Warning。
  • 如果确实抛出了错误,echo $_COOKIE['hey'];怎么会打印cookie值?如果有错误应该不会设置,对吧?
猜你喜欢
  • 2016-04-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-15
  • 1970-01-01
  • 1970-01-01
  • 2021-07-24
  • 1970-01-01
相关资源
最近更新 更多