2009-04-13 146 views
0

我在我的Windows/IIS/PHP虚拟主机上实现自定义404错误页面时出现问题。每当我尝试在标题中发送404状态消息时,都不会将内容发送到客户端,而是会显示一个空白页面。PHP 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处理例如日志记录,数据库写入等正常进行。

任何人都可以提出什么问题可能或如何解决它?

+0

你是否在Firefox和IE上得到了相同的结果?如果没有,我可能知道答案 – OneNerd 2009-04-13 16:52:42

回答

2

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

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

2

如果您将文本放在PHP标签后面怎么办?

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

+0

正如你所建议的,我已将代码更改为: <?php error_reporting(E_ALL); ini_set('display_errors','1'); header('HTTP/1.1 404 Not Found'); header('Status:404 Not Found'); var_dump(headers_list()); ?>内容 输出在我的主机上仍然是空白的。 – Loftx 2009-04-13 14:37:41

+0

对不起,这并没有显示太好 - 我的主机也运行脚本在服务器命令行输出:array(0){}并没有错误。尽管我设想header()是专门用于通过web服务器调用php的。 – Loftx 2009-04-13 14:40:20

5

'空白页面'闻起来像error_reporting(0)隐藏您将得到的错误消息。也许在你的头文件之前有一些输出,并引发错误。检查一下。

0

检查您的主机是否允许您使用PHP即时更改标题。我的主机不允许我通过PHP设置404头,尽管其他头文件(301,内容类型)很好。

0

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

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

(边注:Status头是不是一个真正的HTTP标头仅用于从一个应用程序服务器本身的通信信息)

1

我有PHP 5.2.6 Linux上的同样的问题。我发现第一个8109字节不是由Web服务器打印的。

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