http_response_code() 总是 returns 200,即使是 404
http_response_code() always returns 200, even on 404
我正在尝试使用 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 给了我 200
.
什么给了?
编辑:我在基于 Apache 的本地主机上有完全相同的代码,它工作得很好。这就是我问这个问题的原因。 PHP 完全意识到在我的本地环境中发生了 404 错误。然而,在我的托管环境中,PHP 不知道。
这个函数基本上是setter/getter对于PHP的响应码。如果没有参数,此函数 return 是 PHP 当前设置的响应代码 。由于默认响应代码是 200
,如果不通过首先传递参数来设置不同的代码,200
将始终是 return。
请参阅 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()
调用也可能会影响此函数的return值,例如:
header('http/1.0 404 not found');
var_dump(http_response_code()); // int(404) - new code
正如@Boaz 所说,PHP 不知道 Apache 稍后要设置什么。
您可以使用此方法来使用 PHP 中的错误代码:
ErrorDocument 400 /error.php?error=400
ErrorDocument 401 /error.php?error=401
...
并在 PHP 测试 $_GET["error"]
.
我正在尝试使用 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 给了我 200
.
什么给了?
编辑:我在基于 Apache 的本地主机上有完全相同的代码,它工作得很好。这就是我问这个问题的原因。 PHP 完全意识到在我的本地环境中发生了 404 错误。然而,在我的托管环境中,PHP 不知道。
这个函数基本上是setter/getter对于PHP的响应码。如果没有参数,此函数 return 是 PHP 当前设置的响应代码 。由于默认响应代码是 200
,如果不通过首先传递参数来设置不同的代码,200
将始终是 return。
请参阅 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()
调用也可能会影响此函数的return值,例如:
header('http/1.0 404 not found');
var_dump(http_response_code()); // int(404) - new code
正如@Boaz 所说,PHP 不知道 Apache 稍后要设置什么。
您可以使用此方法来使用 PHP 中的错误代码:
ErrorDocument 400 /error.php?error=400
ErrorDocument 401 /error.php?error=401
...
并在 PHP 测试 $_GET["error"]
.