Fehler bei bereits gesendeten Headern in PHP
Beim Ausführen von PHP-Skripten können Fehler auftreten wie:
Warning: Cannot modify header information - headers already sent by (output started at /some/file.php:12) in /some/file.php on line 23
Dies tritt auf, wenn HTTP-Header gesendet werden Es wurde versucht, es zu senden/zu ändern, nachdem eine Ausgabe generiert wurde. Funktionen wie header(), setcookie() und session_start() erfordern das Senden von Headern, bevor eine Ausgabe erfolgt.
Ursachen für Fehler beim Senden von Headern
Unbeabsichtigte Ausgabe:
- Leerzeichen vor
- UTF-8 Byte Order Mark (BOM)
- Vorherige Fehlermeldungen oder Hinweise
Beabsichtigte Ausgabe:
- Funktionen wie Drucken, Echo oder andere, die eine Ausgabe erzeugen
- Roh-HTML-Abschnitte
Identifizierung der Quelle von Ausgabe
Die Fehlermeldung enthält normalerweise die Zeile, in der die Header-Funktion aufgerufen wurde (z. B. Zeile 23) und die Quelle der vorzeitigen Ausgabe (z. B. Zeile 12).
Lösungen
Vermeiden Sie vorzeitige Ausgaben:
- Verwenden Sie Funktionen und Vorlagenschemata, um die Anwendung neu zu strukturieren Flow.
- Stellen Sie sicher, dass header()-Aufrufe durchgeführt werden, bevor Sie Nachrichten schreiben oder die Ausgabe rendern.
Spezifische Ursachen beheben:
-
Drucken/Echo : Verwenden Sie zum Verwalten Funktionen wie trigger_error, ob_flush oder var_dump Ausgabe.
-
Raw HTML: Platzieren Sie Formularverarbeitungs- und Skriptbedingungen vor HTML-Abschnitten.
-
Leerzeichen: Entfernen Sie führende Leerzeichen oder verwenden Sie lange PHP-Tags ( ) anstelle von Kurzschrift-Tags (=).
- UTF-8 Stückliste: Stellen Sie Ihren Texteditor so ein, dass Dateien als „UTF-8 (keine Stückliste)“ gespeichert werden, oder verwenden Sie einen Hex-Editor, um Stücklisten zu entfernen.
- Nachgestelltes Leerzeichen nach ?>: Lassen Sie nachgestellte PHP-Close-Tags weg.
-
Sonstiges: Suchen Sie nach PHP-Erweiterungen oder php.ini-Einstellungen Dies kann zu einer impliziten Ausgabe führen.
-
Fehlermeldungen: Vermeiden Sie Fehler, verzögern Sie ihre Ausführung oder unterdrücken Sie sie mit isset() oder @().
Ausgabe Pufferung (Problemumgehung):
- Aktivieren Sie die Ausgabepufferung, indem Sie „output_buffering“ in php.ini festlegen oder verwenden ob_start().
- Verwenden Sie ob_clean(), wenn binäre Inhalte generiert werden.
- Beachten Sie, dass die Ausgabepufferung kein Ersatz für eine ordnungsgemäße Anwendungsstrukturierung ist.
Fallback-Workarounds :
-
HTML Meta Tag: Inject
-
JavaScript-Weiterleitung: Verwenden Sie location.replace() oder location.href= zur Weiterleitung Kunden.
Das obige ist der detaillierte Inhalt vonWarum erhalte ich in PHP die Fehlermeldung „Header bereits gesendet'?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!
Stellungnahme:Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn