【问题标题】:PHP 404 error page won't display contentPHP 404 错误页面不会显示内容
【发布时间】:2010-10-19 03:31:23
【问题描述】:

我在 Windows/IIS/PHP 虚拟主机上实现自定义 404 错误页面时遇到问题。每当我尝试在标头中发送 404 状态消息时,都不会向客户端发送任何内容,而是显示一个空白页面。

这是我正在使用的一个非常简单的脚本:

<?php
  header('HTTP/1.1 404 Not Found');
  header('Status: 404 Not Found');
  var_dump(headers_list());
?>

在我的开发机器上,输出(显示在浏览器中)是

array(2) { [0]=>  string(23) "X-Powered-By: PHP/5.2.6" [1]=>  string(21) "Status: 404 Not Found" }

在我的主机上没有输出。尽管 PHP 处理例如日志记录、数据库写入等继续正常进行。

谁能建议可能是什么问题或如何解决它?

【问题讨论】:

  • 你在 Firefox 和 IE 上得到同样的结果吗?如果没有,我可能知道答案

标签: php header http-status-code-404


【解决方案1】:

如果你在 PHP 标记之后添加文本呢?

此外,请确保您的脚本没有在主机上出错,无论是检查 apache 错误日志、在脚本上运行 php -l 还是打开 error_reporting 和 display_errors。

【讨论】:

  • 按照你的建议,我已将代码更改为:CONTENT 我的主机上的输出仍然是空白的。
  • 抱歉,显示的不太好 - 我的主机也在服务器命令行上为我运行了脚本,输出为:array(0) {} 并且没有错误。虽然我认为 header() 专门用于通过网络服务器调用 php 时。
  • 尝试一次注释掉 1 行,直到看到“CONTENT”输出
【解决方案2】:

'blank page' 闻起来像 error_reporting(0) 隐藏了你会得到的错误消息。也许在您的标题之前有一些输出,这会引发错误。检查一下。

【讨论】:

  • +1,听起来很蠢,但看过几次,应该是第一件事检查
【解决方案3】:

如果在您的主机上将 PHP 配置为通过 CGI 运行,则可能无法在 IIS 中生成 404 错误页面(除非撒谎并返回 200 OK,这是一件坏事)。当然,我无法说服 IIS 4-6.0 允许我的 CGI 404 错误通过浏览器。

无论如何,您通常都不希望 PHP 运行 CGI,还有其他相关问题以及速度慢。在 IIS 上,应该首选 PHP ISAPI 扩展(虽然我没有尝试过,我无法确认它解决了这个特定问题)。

【讨论】:

    【解决方案4】:

    检查您的主机是否允许您使用 PHP 动态更改标头。我的主机不允许我通过 PHP 设置 404 标头,尽管其他标头(301,内容类型)都可以。

    【讨论】:

      【解决方案5】:

      我的建议是不要自己设置 HTTP/1.1 404 标头,让网络服务器为您完成。

      传统上,这是通过 Status 标头完成的,Web 服务器应将其转换为 HTTP/1.0 或 1.1 404 Not Found 标头。

      (旁注:Status 标头不是真正的 HTTP 标头,仅用于将信息从应用程序传递到服务器本身。)

      【讨论】:

        【解决方案6】:

        我对 Linux 上的 PHP 5.2.6 也有同样的问题。我发现Web服务器没有打印前8109个字节。

        IE6 会忽略长度小于 512 字节的自定义错误页面。这可能是对这个问题的解释,但可能您已经在多个浏览器中进行了测试。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-06-06
          • 1970-01-01
          • 2014-11-10
          • 2012-11-22
          • 2012-07-12
          • 1970-01-01
          • 2021-09-29
          相关资源
          最近更新 更多