W3docs

PHP header_register_callback() Funktion

Die PHP-Funktion header_register_callback() registriert einen Callback, der automatisch ausgeführt wird, bevor HTTP-Header an den Client gesendet werden.

Als PHP-Entwickler müssen Sie in Ihrer Webanwendung möglicherweise HTTP-Header dynamisch bearbeiten. Die Funktion header_register_callback() ist ein in PHP integriertes Werkzeug, das einen Callback registriert, der automatisch ausgeführt wird, bevor Header an den Client gesendet werden. Dieser Leitfaden behandelt die Syntax, Verwendung und bewährte Methoden.

Was ist die header_register_callback() Funktion?

Die Funktion header_register_callback() registriert einen Callback, den PHP im letzten Moment ausführt, bevor HTTP-Header an den Client geleert werden. Dies gibt Ihnen einen einzigen, garantierten Hook, um die Antwort-Header direkt vor dem Verlassen des Servers zu prüfen oder abzuschließen — zum Beispiel, um einen Header hinzuzufügen, der vom Antwortinhalt abhängt, oder um einen Header zu entfernen, den ein früherer Teil der Anfrage gesetzt hat.

Sie passt natürlich zu header(), die einen rohen Header setzt, und headers_list(), mit der Sie die bisher in der Warteschlange befindlichen Header lesen können. Da der Callback ausgelöst wird, bevor die Header festgeschrieben werden, können Sie innerhalb des Callbacks sicher header() oder header_remove() aufrufen — etwas, das nicht mehr möglich ist, sobald die Ausgabe bereits gesendet wurde.

Wann würden Sie sie verwenden?

Verwenden Sie header_register_callback(), wenn Sie einen Header basierend auf Informationen setzen oder ändern müssen, die erst nach der Ausführung der Anforderungslogik bekannt sind, beispielsweise:

  • Hinzufügen eines Content-Length- oder Prüfsummen-Headers, der aus der gepufferten Ausgabe berechnet wird.
  • Setzen eines Sicherheits-Headers (zum Beispiel Content-Security-Policy) an einer zentralen Stelle, anstatt header()-Aufrufe im gesamten Code zu verteilen.
  • Entfernen eines Headers (wie X-Powered-By), den eine Bibliothek früher in der Anfrage hinzugefügt hat.

Verwendung der header_register_callback() Funktion

Die Verwendung der Funktion header_register_callback() ist unkompliziert. Hier ist die Syntax der Funktion:

Die PHP-Syntax der header_register_callback() Funktion

header_register_callback(callable $callback): bool

Die Funktion akzeptiert einen Parameter:

  • callback: Eine aufrufbare Funktion ohne Parameter, die Sie registrieren möchten.

Hinweis: Verfügbar seit PHP 5.4.0. Gibt true bei Erfolg oder false bei Fehler zurück. Überprüfen Sie immer den Rückgabewert, um sicherzustellen, dass der Callback korrekt registriert wurde.

Hier ist ein Beispiel, wie die Funktion header_register_callback() zur Registrierung einer Callback-Funktion verwendet wird:

Verwendung der header_register_callback() Funktion

<?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');
}

In diesem Beispiel definieren wir eine Callback-Funktion namens my_callback, die keine Parameter akzeptiert. Anschließend registrieren wir diese Callback-Funktion mit der Funktion header_register_callback(). Der Callback wird genau einmal aufgerufen, bevor die Header an den Client gesendet werden, sodass Sie HTTP-Header mit der Funktion header() ändern oder hinzufügen können.

Kompatibilitätshinweis: Der Callback wird während der Anforderungs-Shutdown-Phase ausgeführt. Wenn Sie Output-Buffering (ob_start()) oder register_shutdown_function() verwenden, beachten Sie, dass dieser Callback nach dem Leeren der Ausgabe, aber vor der vollständigen Beendigung des Skripts ausgeführt wird. Dieses Timing macht es sicher, Header basierend auf Laufzeitbedingungen zu setzen, ohne die frühe Ausgabe zu beeinträchtigen.

Ein praktisches Beispiel

Eine häufige Verwendung ist die Zentralisierung von Sicherheits-Headern und das Zurücklesen bereits in der Warteschlange befindlicher Header. Innerhalb des Callbacks können Sie headers_list() verwenden, um die aktuellen Header einzusehen und diese bedingt anzupassen:

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

Da der Callback einmalig ausgelöst wird, kurz bevor die Header festgeschrieben werden, erhält jede Antwort dieses Skripts X-Content-Type-Options: nosniff und gibt nie X-Powered-By preis, unabhängig davon, was der Rest der Anfrage getan hat.

Fallstrick: Ein Callback kann nur registriert werden, bevor Header gesendet wurden. Wenn die Ausgabe bereits gestartet hat (sodass headers_sent() true zurückgibt), wird der Callback niemals ausgeführt. Registrieren Sie ihn frühzeitig — idealerweise vor jeglichem echo- oder HTML-Output.

Fazit

Die Funktion header_register_callback() bietet eine zuverlässige Möglichkeit, HTTP-Header dynamisch zu ändern. Indem Sie den Rückgabewert prüfen und den Ausführungszeitpunkt verstehen, können Sie sie sicher in Ihre PHP-Anwendungen integrieren.

Übungen

Übung
Was ist die Funktion von header_register_callback() in PHP?
Was ist die Funktion von header_register_callback() in PHP?
Was this page helpful?