如何使用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
相关产品推荐
相关产品推荐

