http_response_code()总是返回200,即使在404

时间:2015-01-18 23:11:45

标签: php apache .htaccess http-response-codes

我正在尝试使用Apache的ErrorDocument来处理客户端和服务器错误,方法是将它们传递给error.php

.htaccess

ErrorDocument 400 /error.php
...
ErrorDocument 404 /error.php
...
ErrorDocument 511 /error.php

error.php

var_dump(http_response_code());

所以,我将浏览器指向mywebsite.com/noeutdhoaeu,这不存在。正如您所料,服务器的响应为404 Not Found。但PHP给了我{​​{1}}。

是什么给出了?

编辑:我在基于Apache的localhost上使用了相同的代码,它运行正常。这就是我提出这个问题的原因。 PHP完全清楚我的本地环境中发生了404错误。但是,在我的托管环境中,PHP不知道。

2 个答案:

答案 0 :(得分:4)

此函数基本上是PHP 响应代码的setter / getter 。如果没有参数,此函数将返回PHP当前设置的响应代码 。由于默认响应代码为200,因此无需先通过参数设置不同的代码,系统将始终返回200

请参阅manual

中的此示例
var_dump(http_response_code()); // int(200) - default
http_response_code(404); // set a new code
var_dump(http_response_code()); // int(404) - new code

值得注意的是,header()调用也可能影响此函数的返回值,例如:

header('http/1.0 404 not found');
var_dump(http_response_code()); // int(404) - new code

答案 1 :(得分:3)

正如@Boaz所说,PHP并不知道Apache将在以后设置什么。

您可以使用此方法在PHP中使用错误代码:

ErrorDocument 400 /error.php?error=400
ErrorDocument 401 /error.php?error=401
...

在PHP测试中$_GET["error"]