PHP如何获取http状态码

admin 轻心小站 关注 LV.19 运营
发表于php技术学习版块 教程

在 PHP 中,获取 HTTP 状态码通常与发送 HTTP 响应的 HTTP 服务器有关。PHP 本身不直接提供获取 HTTP 状态码的函数,因为一旦 PHP 脚本开始执行,HTTP 头部(Heade

在 PHP 中,获取 HTTP 状态码通常与发送 HTTP 响应的 HTTP 服务器有关。PHP 本身不直接提供获取 HTTP 状态码的函数,因为一旦 PHP 脚本开始执行,HTTP 头部(Headers)已经发送,所以无法通过 PHP 获取服务器发送的原始状态码。

不过,有几种方法可以间接获取或推断 HTTP 状态码:

  1. 使用服务器或环境变量:
    某些服务器可能会设置一个环境变量,该变量包含了 HTTP 状态码。例如,在 Apache 服务器中,可以使用 $_SERVER['REDIRECT_STATUS'] 来获取重定向后的状态码。

    $status = isset($_SERVER['REDIRECT_STATUS']) ? $_SERVER['REDIRECT_STATUS'] : null;
  2. 使用 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;
  3. 捕获输出:
    如果你有控制权,可以在脚本执行的早期阶段捕获输出,然后检查捕获的输出中的 HTTP 状态行。

    ob_start();
    // ... 你的脚本逻辑 ...
    $output = ob_get_contents();
    ob_end_clean();
    preg_match('{HTTP/\S*\s(\d{3})}', $output, $match);
    $status = $match[1] ?? null;
  4. 使用反向代理或负载均衡器日志:
    如果你的 PHP 应用运行在 Nginx 或 Apache 等反向代理或负载均衡器之后,你可以查看这些代理的访问日志来获取状态码。

  5. 自定义日志记录:
    在应用程序中,你可以自定义日志记录机制,记录每个请求的状态码。

请注意,如果你想要设置 HTTP 状态码,可以使用 http_response_code() 函数。但是,如果你想要获取状态码,通常需要依赖服务器环境变量或使用 HTTP 客户端库。

文章说明:

本文原创发布于探乎站长论坛,未经许可,禁止转载。

题图来自Unsplash,基于CC0协议

该文观点仅代表作者本人,探乎站长论坛平台仅提供信息存储空间服务。

评论列表 评论
发布评论

评论: PHP如何获取http状态码

粉丝

0

关注

0

收藏

0

已有0次打赏