在 PHP 中,获取 HTTP 状态码通常与发送 HTTP 响应的 HTTP 服务器有关。PHP 本身不直接提供获取 HTTP 状态码的函数,因为一旦 PHP 脚本开始执行,HTTP 头部(Heade
在 PHP 中,获取 HTTP 状态码通常与发送 HTTP 响应的 HTTP 服务器有关。PHP 本身不直接提供获取 HTTP 状态码的函数,因为一旦 PHP 脚本开始执行,HTTP 头部(Headers)已经发送,所以无法通过 PHP 获取服务器发送的原始状态码。
不过,有几种方法可以间接获取或推断 HTTP 状态码:
使用服务器或环境变量:
某些服务器可能会设置一个环境变量,该变量包含了 HTTP 状态码。例如,在 Apache 服务器中,可以使用 $_SERVER['REDIRECT_STATUS'] 来获取重定向后的状态码。
$status = isset($_SERVER['REDIRECT_STATUS']) ? $_SERVER['REDIRECT_STATUS'] : null;
使用 HTTP 客户端库:
如果你正在使用一个 HTTP 客户端库(如 Guzzle 或 cURL)来发送请求,那么该库可能会提供获取响应状态码的方法。
// 使用 Guzzle
$response = $client->request('GET', 'http://example.com');
echo $response->getStatusCode();
// 使用 cURL
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://example.com");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
$status_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
echo $status_code;
捕获输出:
如果你有控制权,可以在脚本执行的早期阶段捕获输出,然后检查捕获的输出中的 HTTP 状态行。
ob_start();
// ... 你的脚本逻辑 ...
$output = ob_get_contents();
ob_end_clean();
preg_match('{HTTP/\S*\s(\d{3})}', $output, $match);
$status = $match[1] ?? null;
使用反向代理或负载均衡器日志:
如果你的 PHP 应用运行在 Nginx 或 Apache 等反向代理或负载均衡器之后,你可以查看这些代理的访问日志来获取状态码。
自定义日志记录:
在应用程序中,你可以自定义日志记录机制,记录每个请求的状态码。
请注意,如果你想要设置 HTTP 状态码,可以使用 http_response_code() 函数。但是,如果你想要获取状态码,通常需要依赖服务器环境变量或使用 HTTP 客户端库。
粉丝
0
关注
0
收藏
0