Aktueller Standort: Startseite> Neueste Artikel> Die Header -Funktion fordert "bereits gesendete Headers" auf? Versuchen Sie, praktische Fälle mit OB_Start () zu lösen

Die Header -Funktion fordert "bereits gesendete Headers" auf? Versuchen Sie, praktische Fälle mit OB_Start () zu lösen

M66 2025-06-15

In der PHP -Programmierung wird die Header -Funktion verwendet, um RAW -HTTP -Header an den Client zu senden, der normalerweise zum Umleiten, Einstellen von Inhaltstypen usw. verwendet wird. Während der Entwicklung können wir jedoch auf einen gemeinsamen Fehler stoßen: Die bereits gesendeten Headers . Dieser Fehler tritt normalerweise auf, wenn Sie versuchen, die Header () -Funktion zu verwenden, nachdem Sie die Ausgabe gesendet haben.

Heute werden wir uns mit der Ursache dieses Fehlers befassen und einen praktischen Fall verwenden, um zu zeigen, wie sie mit OB_Start () gelöst werden können.

1. Was sind die bereits gesendeten Headerfehler?

In PHP muss die Funktion Header () aufgerufen werden, bevor die Seite etwas ausgibt. Wenn Header () aufgerufen wird, nachdem Sie etwas ausgegeben haben (z. B. HTML -Tags, Leerzeichen oder Fehlermeldungen), werden bereits Fehler mit den Headern gesendet . PHP versucht, einen HTTP -Header an den Browser zu senden, aber da bereits Inhaltsausgabe vorhanden ist, kann der HTTP -Header nicht mehr ändern, was zu einem Fehler führt.

2. Häufige Gründe

  • Unerwartete Räume oder Newlines : Der häufigste Grund ist, dass es zu Beginn oder am Ende einer Datei zusätzliche Räume oder Neulinge gibt. Am Anfang der PHP -Datei oder nach dem Ende des ?> -Tags wird vor dem <? Php -Tag ausgegeben, was dazu führt, dass PHP automatisch HTTP -Header sendet.

  • HTML oder anderer Ausgabeinhalte : Wenn ein PHP-Skript HTML, Echo-Anweisungen oder andere Nicht-Php-Ausgaben ausgibt, bevor Sie Header aufrufen () , werden bereits Headers gesendete Fehler verursacht.

3. Wie kann man dieses Problem lösen?

Eine gemeinsame Lösung besteht darin , die Ausgangspufferfunktion von PHP zu verwenden .

Praktischer Fall: Verwenden Sie Ob_Start (), um den Fehler "bereits gesendete Headers gesendet" zu lösen

Angenommen, wir haben ein einfaches PHP -Skript, das versucht, auf eine andere Seite umzuleiten, aber auf einen bereits gesendeten Header beim Ausführen aufnimmt.

Problemcode:

 <?php
// Angenommen, es gibt zu Beginn der Datei einen unerwarteten Platz oder eine Zeilenpause
echo "This is some content before the header.";

// Versuchen Sie, umzuleiten
header("Location: http://m66.net/anotherpage.php");
exit();
?>

Wenn Sie diesen Code ausführen, kann der Browser die folgende Fehlermeldung anzeigen:

 Warning: Cannot modify header information - headers already sent by (output started at /path/to/script.php:2) in /path/to/script.php on line 6

Der Grund für das Problem ist, dass Echo den Inhalt ausgibt, wodurch der HTTP -Header gesendet wird. Wenn die Header () -Funktion aufgerufen wird, kann der Header daher nicht mehr geändert werden.

Lösung: Verwenden Sie OB_Start ()

Wir können die Ausgangspufferfunktion von PHP verwenden, um dieses Problem zu lösen. Die Funktion ob_start () ermöglicht den Ausgabebuffer, so dass PHP den Inhalt zuerst im Puffer speichert, bis das Skript ausgeführt wird oder ob_end_flush () aufgerufen wird.

Behobener Code:

 <?php
// Schalten Sie den Ausgangspuffer ein
ob_start();

// Angenommen, es gibt zu Beginn der Datei einen unerwarteten Platz oder eine Zeilenpause
echo "This is some content before the header.";

// Versuchen Sie, umzuleiten
header("Location: http://m66.net/anotherpage.php");
exit();

// Beenden Sie den Ausgangspuffer und senden Sie alles
ob_end_flush();
?>

In diesem geänderten Code aktiviert Ob_Start () den Ausgabebuffer. Selbst wenn Echo Inhalte ausgibt, wird der Inhalt nicht sofort an den Browser gesendet, sondern im Puffer zwischengespeichert, bis das Skript ausgeführt wird. Beim Aufrufen der Header () -Funktion kann PHP den HTTP -Header weiterhin ändern, um die bereits gesendeten Header -Fehler zu vermeiden.

4. Zusammenfassung

Durch die Verwendung von OB_Start () und Ausgangspuffer können wir den Fehler "bereits gesendet" beim Aufrufen der Header () -Funktion vermeiden. Dieser Ansatz ist sehr nützlich in der realen Entwicklung, insbesondere wenn Sie keine Kontrolle über andere Ausgänge haben (z. B. importierte Dateien oder Bibliotheken von Drittanbietern).

Wenn Sie auf diese Art von Fehler stoßen, können Sie auch versuchen, Ob_Start () zum Beginn des Codes hinzuzufügen, um das Problem zu lösen. Es ist eine einfache und effektive Lösung.