ZetCode

PHP headers_list 函数

最后修改于 2025 年 4 月 4 日

PHP 的 headers_list 函数用于检索将要发送到客户端的响应标头列表。它对于调试和标头检查非常有用。

基本定义

headers_list 返回一个准备发送的标头数组。这些标头包括 PHP 生成的和使用 header() 手动设置的标头。

语法:headers_list(): array。返回一个数字索引数组。标头仅在输出缓冲开始后或在输出之前可用。

基本标头检查

此示例展示了如何检索和显示所有响应标头。

basic_headers.php
<?php

declare(strict_types=1);

header('Content-Type: text/html; charset=utf-8');
header('X-Powered-By: PHP/8.1');

$headers = headers_list();
print_r($headers);

这将显示为响应设置的所有标头,包括 Content-Type。输出显示了系统生成和自定义标头。

检查特定标头

此示例演示了如何检查是否已设置特定标头。

check_specific_header.php
<?php

declare(strict_types=1);

header('Cache-Control: no-cache');

function has_header(string $name): bool {
    foreach (headers_list() as $header) {
        if (stripos($header, $name) === 0) {
            return true;
        }
    }
    return false;
}

echo has_header('Cache-Control') ? 'Cache header set' : 'No cache header';

这将检查响应标头中是否存在 Cache-Control 标头。该函数搜索以指定名称开头的标头。

标头修改检测

此示例展示了如何检测标头是否已被修改。

header_modification.php
<?php

declare(strict_types=1);

$initial_headers = headers_list();

header('X-Custom-Header: Value');
header_remove('X-Powered-By');

$current_headers = headers_list();
$modified = $initial_headers != $current_headers;

echo $modified ? 'Headers changed' : 'Headers unchanged';

这将比较修改前后的标头以检测更改。对于需要验证标头修改的中间件很有用。

Content-Type 验证

此示例展示了如何在输出前验证 Content-Type 标头。

content_type_check.php
<?php

declare(strict_types=1);

function validate_content_type(string $expected): bool {
    foreach (headers_list() as $header) {
        if (stripos($header, 'Content-Type:') === 0) {
            return stripos($header, $expected) !== false;
        }
    }
    return false;
}

header('Content-Type: application/json');
echo validate_content_type('json') ? 'Valid' : 'Invalid';

这将确保响应的 Content-Type 在发送前与预期匹配。在需要特定格式的 API 实现中特别有用。

标头调试工具

此示例创建了一个用于开发的简单标头调试工具。

header_debugger.php
<?php

declare(strict_types=1);

header('X-Debug: Enabled');
header('Cache-Control: no-store');

function debug_headers(): string {
    $output = "<h3>Response Headers</h3><ul>";
    foreach (headers_list() as $header) {
        $output .= "<li>" . htmlspecialchars($header) . "</li>";
    }
    return $output . "</ul>";
}

echo debug_headers();

这将为调试目的创建一个响应标头的 HTML 列表。在开发过程中有助于验证标头配置。

最佳实践

来源

PHP headers_list 文档

本教程通过实际示例介绍了 PHP 的 headers_list 函数,用于 PHP 应用程序中的标头检查、验证和调试。

作者

我叫 Jan Bodnar,是一位充满热情的程序员,拥有丰富的编程经验。我从 2007 年开始撰写编程文章。至今,我已撰写了 1400 多篇文章和 8 本电子书。我在编程教学方面拥有十多年的经验。

列出 所有 PHP 网络函数