PHP Conference Japan 2024

header_register_callback

(PHP 5 >= 5.4.0, PHP 7, PHP 8)

header_register_callback呼叫標頭函式

說明

header_register_callback(可呼叫 $callback): 布林值

註冊一個將在 PHP 開始傳送輸出時呼叫的函式。

在 PHP 準備好要傳送的所有標頭之後,以及在傳送任何其他輸出之前,將執行 callback,從而建立一個在傳送標頭之前操作輸出標頭的視窗。

參數

callback

在傳送標頭之前呼叫的函式。它不接收任何參數,且返回值將被忽略。

返回值

成功時返回 true,失敗時返回 false

範例

範例 #1 header_register_callback() 範例

<?php

header
('Content-Type: text/plain');
header('X-Test: foo');

function
foo() {
foreach (
headers_list() as $header) {
if (
strpos($header, 'X-Powered-By:') !== false) {
header_remove('X-Powered-By');
}
header_remove('X-Test');
}
}

$result = header_register_callback('foo');
echo
"a";
?>

上述範例將輸出類似以下的內容

Content-Type: text/plain

a

注意事項

header_register_callback() 會在標頭即將送出時執行,因此此函式的任何輸出都可能會破壞輸出。

注意:

只有在使用支援標頭的 SAPI 時,才能存取和輸出標頭。

參見

新增註釋

使用者貢獻的註釋 1 則註釋

matt@kafene
11 年前
請注意,從 PHP 5.4 開始,此函式只註冊單一回调函式。設定的最新回调函式才會被執行,它們不會像 register_shutdown_function() 那樣依序執行,而會被覆蓋。

這是我的測試

<?php

$i
= $j = 0;
header_register_callback(function() use(&$i){ $i+=2; });
header_register_callback(function() use(&$i){ $i+=3; });
register_shutdown_function(function() use(&$j){ $j+=2; });
register_shutdown_function(function() use(&$j){ $j+=3; });
register_shutdown_function(function() use(&$j){ var_dump($j); });
while(!
headers_sent()) { echo "<!-- ... flushing ... -->"; }
var_dump(headers_sent(), $i);
exit;

?>

結果

headers_sent() - true (真)
$i = 3
$j = 5
To Top