PHP header_remove() Funktion: Alles, was Sie wissen müssen
Als PHP-Entwickler müssen Sie HTTP-Header in Ihrer Webanwendung manipulieren. Die Funktion header_remove() ermöglicht das Entfernen von Headern.
Jede PHP-Antwort enthält eine Reihe von HTTP-Headern — die Metadaten, die der Browser liest, bevor er den eigentlichen Seiteninhalt empfängt (Inhaltstyp, Caching-Regeln, Cookies, Weiterleitungen usw.). Manchmal setzen Sie einen Header früher in einem Skript und entscheiden später, dass er nicht gesendet werden soll. header_remove() ist die eingebaute Funktion, die einen Header aus der ausgehenden Antwort entfernt, bevor sie an den Client gesendet wird.
Dieses Kapitel behandelt die Syntax, den optionalen Parameter, wann das Entfernen tatsächlich funktioniert und die häufigsten Gründe, warum Sie diese Funktion verwenden würden.
Was header_remove() bewirkt
header_remove() löscht einen Header, der zuvor mit header() in die Warteschlange gestellt wurde (oder automatisch von PHP gesetzt wurde), aus der Liste der Header, die mit der Antwort gesendet werden. Da PHP die Header puffert, bis der Body zu streamen beginnt, können Sie sie bis zu diesem Zeitpunkt frei hinzufügen und entfernen.
Die Funktion arbeitet auf der ausgehenden Header-Liste, nicht auf den Anfrage-Headern, die Ihr Skript vom Browser empfangen hat.
Syntax
header_remove(?string $name = null): void$name— der Name des zu entfernenden Headers (Groß-/Kleinschreibung wird ignoriert, ohne Doppelpunkt oder Wert), zum Beispiel"X-Powered-By". Der Parameter ist optional. Wenn Sie ihn weglassen (odernullübergeben), werden alle bisher gesetzten Header entfernt.- Rückgabewert — keiner (
void).
Einen einzelnen Header entfernen
<?php
header("X-MyHeader: Hello World!");
header_remove("X-MyHeader");Hier wird der X-MyHeader-Header in die Warteschlange gestellt und dann entfernt, sodass er den Browser nie erreicht. Der Header-Name wird ohne Berücksichtigung der Groß-/Kleinschreibung abgeglichen, daher würde header_remove("x-myheader") denselben Header entfernen.
Alle Header entfernen
Rufen Sie die Funktion ohne Argument auf, um alle in der Warteschlange befindlichen Header zu löschen:
<?php
header("X-First: 1");
header("X-Second: 2");
header_remove(); // both X-First and X-Second are droppedDies löscht auch Header, die PHP andernfalls hinzufügen würde (wie X-Powered-By, wenn aktiviert), was einer der häufigsten praktischen Anwendungsfälle ist — das Entfernen des Server-Fingerabdrucks, bevor die Ausgabe beginnt.
Wann das Entfernen funktioniert
Header können nur geändert werden, bevor eine Ausgabe gesendet wird. Sobald das erste Byte des Bodys das Skript verlässt — über echo, print, Leerzeichen vor <?php oder ein schließendes ?> gefolgt von einer Leerzeile — werden die Header geleert und gesperrt.
Verwenden Sie headers_sent(), um zu prüfen, ob es noch sicher ist, Header zu ändern, und headers_list(), um die aktuell in der Warteschlange befindlichen Header zu untersuchen:
<?php
header("X-Debug: on");
if (!headers_sent()) {
header_remove("X-Debug");
}
print_r(headers_list()); // X-Debug is no longer in the listWenn die Ausgabe bereits begonnen hat, tut header_remove() nichts und PHP gibt eine Warnung "headers already sent" aus, genau wie header() es tun würde.
Häufige Anwendungsfälle
- Server-Fingerabdruck verbergen. Entfernen Sie
X-Powered-By, damit Antworten Ihre PHP-Version nicht preisgeben. - Einen bedingten Header rückgängig machen. Stellen Sie einen Caching- oder Weiterleitungs-Header früh in die Warteschlange, und verwerfen Sie ihn dann, wenn eine spätere Bedingung Ihre Entscheidung ändert.
- Zurücksetzen vor einer sauberen Weiterleitung. Löschen Sie unerwünschte Header, bevor Sie ein neues
header("Location: ...")ausgeben.
Fazit
header_remove() gibt Ihnen präzise Kontrolle über die ausgehende HTTP-Antwort: Übergeben Sie einen Namen, um einen einzelnen Header zu entfernen, oder rufen Sie die Funktion ohne Argument auf, um alle zu löschen. Kombinieren Sie sie mit headers_sent() und headers_list(), damit Sie Header nur ändern, solange dies noch erlaubt ist, und können so genau steuern, was der Browser empfängt.