Start · Sprachen · PHP · Referenz · header_register_callback

header_register_callback

Funktion

Registriert eine Callback-Funktion, die unmittelbar vor dem Versand der HTTP-Header ausgeführt wird.

seit PHP 5.4.0 Kategorie: http

Signatur

header_register_callback(callable $callback): bool

Beschreibung

header_register_callback erlaubt es, eine Funktion zu registrieren, die automatisch aufgerufen wird, kurz bevor PHP die HTTP-Header an den Client sendet. Innerhalb dieses Callbacks können noch Header hinzugefügt, geändert oder gelesen werden, da sie zu diesem Zeitpunkt noch nicht übertragen wurden.

Ein typischer Anwendungsfall ist das nachträgliche Setzen von Sicherheits-Headern (z. B. Content-Security-Policy, X-Frame-Options) oder das Loggen aller gesendeten Header, ohne jeden einzelnen Ausgabepunkt im Code anpassen zu müssen. Der Callback eignet sich auch dafür, headerbasierte Anpassungen zentral in einem Framework oder Plugin zu kapseln.

Es kann immer nur ein Callback registriert werden. Wird die Funktion mehrfach aufgerufen, überschreibt der zuletzt registrierte Callback den vorherigen. Der Callback erhält keine Parameter und sollte keinen Rückgabewert liefern – ein eventueller Rückgabewert wird ignoriert.

Wichtig: Der Callback wird nicht ausgeführt, wenn die Header bereits gesendet wurden (z. B. durch vorherige Ausgabe ohne Output-Buffering). In diesem Fall gibt die Funktion false zurück und der Callback wird nicht registriert.

Parameter

Name Typ Default Beschreibung
$callback Pflicht callable Eine aufrufbare Funktion (Funktionsname als String, anonyme Funktion oder Array-Callable), die unmittelbar vor dem Header-Versand aufgerufen wird. Der Callback erhält keine Argumente.

Rückgabewert

Typ
bool
Beschreibung
Gibt true zurück, wenn der Callback erfolgreich registriert wurde, oder false, wenn die Header bereits gesendet wurden und eine Registrierung nicht mehr möglich ist.

Beispiele

Sicherheits-Header zentral hinzufügen

<?php
header_register_callback(function () {
    header('X-Frame-Options: DENY');
    header('X-Content-Type-Options: nosniff');
    header('Referrer-Policy: strict-origin-when-cross-origin');
    header('Content-Security-Policy: default-src \'self\'');
});

// Irgendwo später im Code...
echo 'Hallo Welt!';
// Die Sicherheits-Header werden automatisch gesetzt, bevor die Ausgabe gesendet wird.
Hallo Welt!

Alle gesendeten Header zu Debugging-Zwecken loggen

<?php
header_register_callback(function () {
    $headers = headers_list();
    $logFile = '/tmp/header_debug.log';
    $logContent = date('Y-m-d H:i:s') . PHP_EOL;
    foreach ($headers as $h) {
        $logContent .= '  ' . $h . PHP_EOL;
    }
    file_put_contents($logFile, $logContent, FILE_APPEND);
});

header('Content-Type: text/html; charset=UTF-8');
header('Cache-Control: no-cache, must-revalidate');

echo '<p>Seite geladen.</p>';
// Beim Header-Versand wird automatisch ein Log-Eintrag in /tmp/header_debug.log erstellt.
<p>Seite geladen.</p>

// Wichtig · Fallstricke

Nur ein Callback gleichzeitig: Es ist jeweils nur ein Callback registrierbar. Ein zweiter Aufruf von header_register_callback überschreibt den vorherigen Callback stillschweigend.

Timing: Der Callback wird direkt vor dem Senden der Header aufgerufen. Zu diesem Zeitpunkt ist headers_list() bereits befüllbar und header() kann noch verwendet werden. Nach dem Callback ist keine weitere Header-Manipulation möglich.

Output-Buffering: Beim Einsatz von ob_start() verzögert sich der Header-Versand entsprechend. Der Callback wird erst beim tatsächlichen Flush ausgeführt. Dies ermöglicht die Registrierung auch dann, wenn bereits Ausgaben im Buffer vorliegen.

Vorsicht bei Fehlerbehandlung: Exceptions oder Fehler innerhalb des Callbacks können das Header-Senden unterbrechen und zu unerwartetem Verhalten führen. Der Callback sollte daher so schlank und fehlersicher wie möglich gehalten werden.