W3docs

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-Length ou 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 appels header() 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): bool

La 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.

Pratique

Pratique
Quelle est la fonction de header_register_callback() en PHP ?
Quelle est la fonction de header_register_callback() en PHP ?
Was this page helpful?