You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用PHP在发送至客户端浏览器前读取Apache HTTP Headers

如何在Apache发送HTTP头到客户端前用PHP读取它们

要在Apache将HTTP头发送给客户端之前读取这些头,核心是要在任何输出(如HTML内容、echo语句)之前执行读取操作——一旦头被发送就无法再获取。PHP提供了两种实用方案:

方法1:跨服务器兼容的headers_list()

headers_list()函数会返回所有即将发送到客户端的响应头数组,包含PHP手动设置的头和Apache自动添加的头(比如你提供的Last-Modified、Expires等)。

示例代码:

// 先判断头是否还未发送
if (!headers_sent()) {
    // 获取所有待发送的响应头
    $allHeaders = headers_list();
    
    // 遍历输出所有头
    foreach ($allHeaders as $header) {
        echo $header . PHP_EOL;
    }

    // 单独提取某个头(比如Last-Modified)
    $targetHeader = null;
    foreach ($allHeaders as $header) {
        if (str_starts_with($header, 'Last-Modified:')) {
            $targetHeader = trim(substr($header, 15));
            break;
        }
    }

    if ($targetHeader) {
        echo PHP_EOL . "提取到的Last-Modified:" . $targetHeader;
    }
}

方法2:Apache专属的apache_response_headers()

如果确定运行环境是Apache服务器,apache_response_headers()会直接返回关联数组形式的响应头(键为头名称,值为头内容),更方便单独获取指定头。

示例代码:

if (!headers_sent() && function_exists('apache_response_headers')) {
    $apacheHeaders = apache_response_headers();
    
    // 输出所有头
    print_r($apacheHeaders);

    // 直接获取指定头
    if (isset($apacheHeaders['Last-Modified'])) {
        echo PHP_EOL . "Last-Modified:" . $apacheHeaders['Last-Modified'];
    }
}

关键注意事项:

  • 必须在headers_sent()返回false时执行读取操作,否则头已经发送,无法获取。
  • 脚本开头不能有任何前置输出(比如空格、HTML标签),否则会触发头自动发送,导致读取失败。

内容的提问来源于stack exchange,提问作者Norman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 00:52:32