我正在尝试使用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不知道。
答案 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"]
。