ZetCode

PHP header_register_callback 函数

最后修改于 2025 年 4 月 4 日

PHP 的 header_register_callback 函数用于注册一个在 header 被发送时调用的回调函数。这对于 header 操作非常有用。

基本定义

header_register_callback 注册一个函数,该函数将在 PHP 开始发送输出之前调用。回调函数可以修改 header。

语法: header_register_callback(callable $callback): bool。成功时返回 true,失败时返回 false。需要输出缓冲。

基本 Header 回调示例

此示例展示了一个简单的回调,它添加了一个自定义 header。

basic_callback.php
<?php

declare(strict_types=1);

function headerCallback() {
    header('X-Custom-Header: MyValue');
}

header_register_callback('headerCallback');

echo "Content with custom header";

该回调在输出开始前添加了一个 X-Custom-Header。这演示了 header_register_callback 的基本用法。回调会自动运行。

条件 Header 修改

此示例根据应用程序逻辑有条件地修改 header。

conditional_headers.php
<?php

declare(strict_types=1);

function conditionalHeader() {
    if ($_SERVER['REMOTE_ADDR'] === '127.0.0.1') {
        header('X-Debug-Mode: enabled');
    }
}

header_register_callback('conditionalHeader');

echo "Content with conditional headers";

该回调检查客户端 IP,并为 localhost 添加一个调试 header。这展示了如何在输出开始前进行动态 header 决策。

多个回调示例

此示例演示了注册按顺序执行的多个回调。

multiple_callbacks.php
<?php

declare(strict_types=1);

function firstCallback() {
    header('X-First: 1');
}

function secondCallback() {
    header('X-Second: 2');
}

header_register_callback('firstCallback');
header_register_callback('secondCallback');

echo "Content with multiple callbacks";

回调按照注册顺序执行。此示例添加了两个自定义 header。注册顺序决定了回调的执行顺序。

Header 验证回调

此示例使用回调在 header 发送前进行验证。

header_validation.php
<?php

declare(strict_types=1);

function validateHeaders() {
    $headers = headers_list();
    if (!in_array('Content-Type: text/html', $headers)) {
        header('Content-Type: text/html');
    }
}

header_register_callback('validateHeaders');

echo "<html><body>Validated content</body></html>";

该回调会检查现有的 header 并添加缺失的 header。这确保了在输出开始前必需的 header 都存在。对于验证很有用。

带回调的输出缓冲

这展示了输出缓冲如何与 header_register_callback 一起工作。

output_buffering.php
<?php

declare(strict_types=1);

ob_start();

function bufferingCallback() {
    header('X-Buffered: yes');
    header_remove('X-Powered-By');
}

header_register_callback('bufferingCallback');

echo "Buffered content with modified headers";

ob_end_flush();

输出缓冲必须是活动的,header 回调才能工作。此示例展示了缓冲设置和 header 修改。回调在 flush 前运行。

最佳实践

来源

PHP header_register_callback 文档

本教程通过各种场景下的 header 操作的实际示例,涵盖了 PHP 的 header_register_callback 函数。

作者

我的名字是 Jan Bodnar,我是一名热情的程序员,拥有丰富的编程经验。我从 2007 年开始撰写编程文章。迄今为止,我已撰写了 1400 多篇文章和 8 本电子书。我在教授编程方面拥有十多年的经验。

列出 所有 PHP 网络函数