PHP 8.4.0 RC2 available for testing

header_register_callback

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

header_register_callbackEnregistre une fonction de rappel pour l'envoi des en-têtes

Description

header_register_callback(callable $callback): bool

Enregistre une fonction de rappel qui sera appelée lorsque PHP tentera d'écrire sur la sortie.

callback est exécutée juste après que PHP ait préparé les en-têtes à envoyer, et avant qu'il ne les envoie. Ceci permet une manipulation fine des en-têtes avant leur envoi.

Liste de paramètres

callback

La fonction à appeler juste avant que les en-têtes ne soient envoyés. Elle n'accepte aucun paramètre et sa valeur de retour est ignorée.

Valeurs de retour

Cette fonction retourne true en cas de succès ou false si une erreur survient.

Exemples

Exemple #1 Exemple avec 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";
?>

Résultat de l'exemple ci-dessus est similaire à :

Content-Type: text/plain

a

Notes

header_register_callback() est exécutée juste avant l'envoi des en-têtes, donc tout affichage déclenché par cette fonction peut casser l'affichage final de la sortie.

Note:

Les en-têtes ne seront accessibles et s'afficheront que lorsqu'un SAPI qui les supporte sera utilisé.

Voir aussi

add a note

User Contributed Notes 1 note

up
12
matt@kafene
11 years ago
Note that this function only registers a single callback as of php 5.4. The most recent callback set is the one that will be executed, they will not be executed in order like with register_shutdown_function(), just overwritten.

Here is my test:

<?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;

?>

Results:

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