PHP Fonction header_register_callback()
Découvrez comment utiliser la fonction header_register_callback() en PHP pour manipuler dynamiquement les en-têtes HTTP avant leur envoi au client.
En tant que développeur PHP, vous pouvez avoir besoin de manipuler dynamiquement les en-têtes HTTP dans votre application web. La fonction header_register_callback() est un outil PHP intégré qui enregistre un rappel à exécuter automatiquement lorsque les en-têtes sont sur le point d'être envoyés au client. Ce guide couvre sa syntaxe, son utilisation et les bonnes pratiques.
Qu'est-ce que la Fonction header_register_callback() ?
La fonction header_register_callback() enregistre un rappel que PHP exécute au dernier moment avant que les en-têtes HTTP ne soient transmis au client. Cela vous donne un point d'ancrage unique et garanti pour inspecter ou finaliser les en-têtes de réponse juste avant qu'ils ne quittent le serveur — par exemple, pour ajouter un en-tête qui dépend du corps de la réponse, ou pour supprimer un en-tête défini par une partie antérieure de la requête.
Elle s'associe naturellement à header(), qui définit un en-tête brut, et à headers_list(), qui vous permet de lire les en-têtes mis en file d'attente jusqu'à présent. Étant donné que le rappel se déclenche avant que les en-têtes ne soient validés, vous pouvez toujours appeler header() ou header_remove() en son sein — ce que vous ne pouvez pas faire une fois que la sortie a déjà été envoyée.
Quand l'Utiliser ?
Utilisez header_register_callback() lorsque vous devez définir ou modifier un en-tête en fonction d'informations qui ne sont connues qu'après l'exécution de la logique de requête, par exemple :
- Ajouter un en-tête
Content-Lengthou une somme de contrôle calculée à partir d'une sortie bufférisée. - Définir un en-tête de sécurité (par exemple
Content-Security-Policy) en un seul endroit central au lieu de disperser les appelsheader()dans tout le code. - Supprimer un en-tête (comme
X-Powered-By) qu'une bibliothèque a ajouté plus tôt dans la requête.
Comment Utiliser la Fonction header_register_callback()
L'utilisation de la fonction header_register_callback() est simple. Voici la syntaxe de la fonction :
Syntaxe PHP de la Fonction header_register_callback()
header_register_callback(callable $callback): boolLa fonction prend un paramètre :
callback: Une fonction appelable sans paramètres que vous souhaitez enregistrer.
Remarque : Disponible depuis PHP 5.4.0. Retourne true en cas de succès, ou false en cas d'échec. Vérifiez toujours la valeur de retour pour vous assurer que le rappel a été enregistré correctement.
Voici un exemple d'utilisation de la fonction header_register_callback() pour enregistrer une fonction de rappel :
Comment Utiliser la Fonction header_register_callback() ?
<?php
function my_callback() {
header('X-Custom-Header: CustomValue');
}
if (!header_register_callback('my_callback')) {
// Handle potential registration failure
error_log('Failed to register header callback');
}Dans cet exemple, nous définissons une fonction de rappel appelée my_callback qui n'accepte aucun paramètre. Nous enregistrons ensuite cette fonction de rappel à l'aide de la fonction header_register_callback(). Le rappel est invoqué exactement une fois lorsque les en-têtes sont sur le point d'être envoyés au client, vous permettant de modifier ou d'ajouter des en-têtes HTTP en utilisant la fonction header().
Note de compatibilité : Le rappel s'exécute lors de la phase d'arrêt de la requête. Si vous utilisez le tampon de sortie (ob_start()) ou register_shutdown_function(), sachez que ce rappel s'exécute après que la sortie est vidée mais avant que le script ne se termine complètement. Cette synchronisation le rend sûr pour définir des en-têtes basés sur des conditions d'exécution sans interférer avec une sortie précoce.
Un Exemple Pratique
Un usage courant consiste à centraliser les en-têtes de sécurité et à lire ce qui est déjà mis en file d'attente. À l'intérieur du rappel, vous pouvez utiliser headers_list() pour voir les en-têtes actuels et les ajuster conditionnellement :
<?php
function finalize_headers() {
// Add a security header for every response.
header('X-Content-Type-Options: nosniff');
// Remove a header earlier code may have set.
header_remove('X-Powered-By');
// Inspect what is about to be sent.
foreach (headers_list() as $h) {
error_log('Outgoing header: ' . $h);
}
}
header_register_callback('finalize_headers');
echo 'Hello, world!';Étant donné que le rappel se déclenche une seule fois, juste avant que les en-têtes ne soient validés, chaque réponse de ce script reçoit X-Content-Type-Options: nosniff et ne divulgue jamais X-Powered-By, quoi que le reste de la requête ait fait.
Attention : Un rappel ne peut être enregistré qu'avant que les en-têtes ne soient envoyés. Si la sortie a déjà commencé (donc si headers_sent() retourne true), le rappel ne s'exécutera jamais. Enregistrez-le tôt — idéalement avant tout echo ou sortie HTML.
Conclusion
La fonction header_register_callback() fournit un moyen fiable de modifier dynamiquement les en-têtes HTTP. En vérifiant sa valeur de retour et en comprenant sa synchronisation d'exécution, vous pouvez l'intégrer en toute sécurité dans vos applications PHP.