PHP 404错误页面将不显示内容

时间:2009-04-13 14:27:13

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

我在Windows / IIS / PHP webhost上实现自定义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回应什么内容,或者作为普通HTML包含在下面,尽管PHP处理例如记录,数据库写入等正常继续。

有人可以提出问题或解决方法吗?

6 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:2)

如果在PHP标记之后放置文本怎么办?

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

答案 2 :(得分:2)

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

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

答案 3 :(得分:1)

我在Linux上遇到与PHP 5.2.6相同的问题。我发现Web服务器不会打印前8109个字节。

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

答案 4 :(得分:0)

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

答案 5 :(得分:0)

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

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

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

相关问题