it-swarm.com.de

Wie man den Fehler "Bereits gesendete Header" in PHP behebt

Beim Ausführen meines Skripts werden mehrere Fehler wie die folgende angezeigt:

Warnung: Header-Informationen können nicht geändert werden - Header, die bereits von einer ( - Ausgabe gesendet wurden, wurden in /some/file.php:12 ) in /some/file.php gestartet in Zeile 23

Die in den Fehlermeldungen genannten Zeilen enthalten die Aufrufe header() und setcookie() .

Was könnte der Grund dafür sein? Und wie kann man das beheben?

833
Moses89

Keine Ausgabe vor dem Senden von Headern!

Funktionen, die HTTP-Header senden/ändern, müssen aufgerufen werden, bevor eine Ausgabe erfolgt summary ⇊ Andernfalls schlägt der Anruf fehl:

Warnung: Headerinformationen können nicht geändert werden - Header bereits gesendet (Ausgabe gestartet um script: line)

Einige Funktionen zum Ändern des HTTP-Headers sind:

Die Ausgabe kann sein:

  • Unbeabsichtigt:

    • Leerzeichen vor <?php oder nach ?>
    • Das TF-8 Byte Order Mark speziell
    • Vorherige Fehlermeldungen oder Hinweise
  • Absicht:

    • print, echo und andere Funktionen, die eine Ausgabe erzeugen
    • Raw <html> Abschnitte vor <?php Code.

Warum passiert das?

Um zu verstehen, warum Header vor der Ausgabe gesendet werden müssen, muss eine typische HTTP Antwort betrachtet werden. PHP Skripte generieren hauptsächlich HTML-Inhalte, übergeben aber auch eine Reihe von HTTP/CGI-Headern an den Webserver:

HTTP/1.1 200 OK
Powered-By: PHP/5.3.7
Vary: Accept-Encoding
Content-Type: text/html; charset=utf-8

<html><head><title>PHP page output page</title></head>
<body><h1>Content</h1> <p>Some more output follows...</p>
and <a href="/"> <img src=internal-icon-delayed> </a>

Die Seite/Ausgabe folgt immer den Überschriften . PHP muss zuerst die Header an den Webserver übergeben. Das kann es nur einmal. Nach dem doppelten Zeilenumbruch kann es sie nie mehr ändern.

Wenn PHP die erste Ausgabe (print, echo, <html>) empfängt, werden alle gesammelten Header gelöscht . Danach kann es alle gewünschten Ausgaben senden. Das Senden weiterer HTTP-Header ist dann jedoch nicht möglich.

Wie können Sie herausfinden, wo die vorzeitige Ausgabe stattgefunden hat?

Die Warnung header() enthält alle relevanten Informationen, um die Ursache des Problems zu lokalisieren:

Warnung: Header-Informationen können nicht geändert werden - Header wurden bereits von gesendet (Ausgabe gestartet um /www/usr2345/htdocs /auth.php: 52) in /www/usr2345/htdocs/index.php in Zeile 100

Hier bezieht sich "Zeile 100" auf das Skript, bei dem der Aufruf von header() fehlgeschlagen ist.

Die Ausgabe ", die bei beginnt" in der Klammer ist wichtiger. Es bezeichnet die Quelle der vorherigen Ausgabe. In diesem Beispiel sind es auth.php und line 52. Hier musste nach vorzeitiger Ausgabe gesucht werden.

Typische Ursachen:

  1. Drucken, Echo

    Die absichtliche Ausgabe von print- und echo-Anweisungen beendet die Möglichkeit, HTTP-Header zu senden. Der Anwendungsfluss muss umstrukturiert werden, um dies zu vermeiden. Verwenden Sie Funktionen und Template-Schemata. Stellen Sie sicher, dass header()-Aufrufe auftreten , bevor Nachrichten ausgeschrieben werden.

    Zu den Funktionen, die eine Ausgabe erzeugen, gehören

    • print, echo, printf, vprintf
    • trigger_error, ob_flush, ob_end_flush, var_dump, print_r
    • readfile, passthru, flush, imagepng, imagejpeg


    unter anderem und benutzerdefinierte Funktionen.

  2. Rohe HTML-Bereiche

    Nicht analysierte HTML-Abschnitte in einer .php-Datei werden ebenfalls direkt ausgegeben. Skriptbedingungen, die einen Aufruf von header() auslösen, müssen vor beliebigen unformatierten <html>-Blöcken notiert werden.

    <!DOCTYPE html>
    <?php
        // Too late for headers already.
    

    Verwenden Sie ein Vorlagenschema, um die Verarbeitung von der Ausgabelogik zu trennen.

    • Platzieren Sie den Formularverarbeitungscode auf den Skripten.
    • Verwenden Sie temporäre Zeichenfolgenvariablen, um Nachrichten aufzuschieben.
    • Die eigentliche Ausgabelogik und die gemischte HTML-Ausgabe sollten als letztes folgen.

  3. Leerzeichen vor <?php für "script.php line 1" - Warnungen

    Wenn sich die Warnung auf die Ausgabe in der Zeile 1 bezieht, führt sie meistens whitespace, text oder HTML vor dem <?php-Token.

     <?php
    # There's a SINGLE space/newline before <? - Which already seals it.
    

    Ebenso kann es bei angehängten Skripten oder Skriptabschnitten vorkommen:

    ?>
    
    <?php
    

    PHP frisst tatsächlich einen einzelnen Zeilenumbruch nach Close-Tags. Es werden jedoch nicht mehrere in solche Lücken verschobene Zeilenumbrüche, Tabulatoren oder Leerzeichen ausgeglichen.

  4. UTF-8-Stückliste

    Zeilenumbrüche und Leerzeichen alleine können ein Problem sein. Es gibt aber auch "unsichtbare" Zeichenfolgen, die dies verursachen können. Am bekanntesten ist die TF-8 BOM (Byte-Order-Mark) , die von den meisten Texteditoren nicht angezeigt wird. Dies ist die Bytefolge EF BB BF, die für UTF-8-codierte Dokumente optional und redundant ist. PHP muss es jedoch als Rohausgabe behandeln. Es kann als Zeichen  in der Ausgabe erscheinen (wenn der Client das Dokument als Latin-1 interpretiert) oder als ähnlicher "Müll".

    Insbesondere grafische Editoren und Java-basierte IDEs sind sich dessen nicht bewusst. Sie visualisieren es nicht (gemäß Unicode-Standard). Die meisten Programmierer und Konsoleneditoren machen jedoch:

    joes editor showing UTF-8 BOM placeholder, and MC editor a dot

    Dort ist das Problem leicht zu erkennen. Andere Editoren können das Vorhandensein in einem Datei-/Einstellungsmenü identifizieren (Notepad ++ unter Windows kann das Problem identifizieren und beheben ). Eine andere Option zum Überprüfen des Vorhandenseins der Stückliste ist die Verwendung eines hexeditor. Auf * nix-Systemen hexdump ist normalerweise verfügbar, sofern es sich nicht um eine grafische Variante handelt, die die Prüfung dieser und anderer Probleme vereinfacht:

    beav hexeditor showing utf-8 bom

    Eine einfache Lösung besteht darin, den Texteditor so einzustellen, dass Dateien unter "UTF-8 (keine Stückliste)" oder einer ähnlichen Nomenklatur gespeichert werden. Oft greifen Neulinge auf andere Weise darauf zurück, neue Dateien zu erstellen und den vorherigen Code einfach zu kopieren und wieder einzufügen.

    Korrekturdienstprogramme 

    Es gibt auch automatisierte Tools zum Überprüfen und erneuten Schreiben von Textdateien ( sed/awk oder recode). Für PHP gibt es speziell das phptags tag tidier . Es schreibt enge und offene Tags in lange und kurze Formen um, behebt aber auch leicht führende und nachfolgende Whitespace-, Unicode- und UTF-x-Stücklistenprobleme:

    phptags  --whitespace  *.php
    

    Es ist sinnvoll, es für ein ganzes Include- oder Projektverzeichnis zu verwenden.

  5. Leerzeichen nach ?>

    Wenn die Fehlerquelle hinter dem schließend ?> steht, wurde hier ein Leerzeichen oder roher Text geschrieben. Die PHP -Endemarkierung beendet die Skriptausführung zu diesem Zeitpunkt nicht. Alle nachfolgenden Text-/Leerzeichen werden weiterhin als Seiteninhalt ausgegeben.

    Insbesondere Neulingen wird häufig geraten, ?> PHP close -Tags nicht nachzustellen. Dies vermeidet einen kleinen Teil dieser Fälle. (Häufig sind include()d-Skripte der Schuldige.)

  6. Fehlerquelle "Unbekannt in Zeile 0"

    Dies ist normalerweise eine PHP -Erweiterung oder eine php.ini -Einstellung, wenn keine Fehlerquelle konkretisiert ist.

    • Es ist gelegentlich die Einstellung für die gzip-Stream-Codierung oder der ob_gzhandler .
    • Es kann sich aber auch um ein doppelt geladenes extension=-Modul handeln, das eine implizite PHP Start-/Warnmeldung generiert.

  7. Vorhergehende Fehlermeldungen

    Wenn eine andere PHP -Anweisung oder ein anderer Ausdruck einen Ausdruck einer Warnmeldung oder eines Hinweises verursacht, gilt dies ebenfalls als vorzeitige Ausgabe.

    In diesem Fall müssen Sie den Fehler vermeiden, die Ausführung der Anweisung verzögern oder die Nachricht mit z. isset() oder @() - wenn einer der beiden das spätere Debuggen nicht behindert.

Keine Fehlermeldung

Wenn Sie error_reporting oder display_errors für php.ini deaktiviert haben, wird keine Warnung angezeigt. Das Ignorieren von Fehlern lässt das Problem jedoch nicht verschwinden. Header können nach vorzeitiger Ausgabe immer noch nicht gesendet werden.

Wenn header("Location: ...") Redirects stillschweigend fehlschlagen, ist es sehr ratsam, nach Warnungen zu suchen. Aktivieren Sie sie erneut mit zwei einfachen Befehlen über dem Aufrufskript:

error_reporting(E_ALL);
ini_set("display_errors", 1);

Oder set_error_handler("var_dump");, wenn alles andere fehlschlägt.

Wo wir gerade von Redirect-Headern sprechen, sollten Sie für endgültige Codepfade häufig ein Idiom wie das folgende verwenden:

exit(header("Location: /finished.html"));

Am liebsten sogar eine Utility-Funktion, die bei header()-Fehlern eine Benutzermeldung ausgibt.

Ausgabepufferung als Workaround

PHPs Ausgabepufferung ist eine Problemumgehung, um dieses Problem zu beheben. Es funktioniert oft zuverlässig, sollte jedoch nicht die ordnungsgemäße Strukturierung der Anwendung und die Trennung der Ausgabe von der Steuerlogik ersetzen. Der eigentliche Zweck ist die Minimierung von Chunk-Übertragungen auf den Webserver.

  1. Die Einstellung output_buffering= kann trotzdem helfen. Konfigurieren Sie es in der php.ini oder über . Htaccess oder sogar . User.ini auf modernen FPM/FastCGI-Setups.
    Wenn Sie diese Option aktivieren, kann PHP die Ausgabe puffern, anstatt sie sofort an den Webserver weiterzuleiten. PHP kann somit HTTP-Header aggregieren.

  2. Sie kann ebenfalls mit einem Aufruf von ob_start(); über dem Aufrufskript belegt werden. Was jedoch aus mehreren Gründen weniger zuverlässig ist:

    • Selbst wenn <?php ob_start(); ?> das erste Skript startet, werden Leerzeichen oder Stücklisten möglicherweise vorher gemischt wodurch sie unwirksam werden .

    • Es kann Leerzeichen für die HTML-Ausgabe verbergen. Sobald die Anwendungslogik jedoch versucht, binären Inhalt zu senden (z. B. ein generiertes Bild), wird die gepufferte externe Ausgabe zu einem Problem. (Erforderliche ob_clean() als weitere Problemumgehung.)

    • Der Puffer ist in der Größe begrenzt und kann leicht überlaufen, wenn die Standardeinstellungen beibehalten werden. Und das kommt auch nicht selten vor, schwer aufzuspüren wenn es passiert.

Beide Ansätze können daher unzuverlässig werden - insbesondere beim Wechsel zwischen Entwicklungs-Setups und/oder Produktionsservern. Aus diesem Grund wird die Ausgabepufferung im Allgemeinen nur als Krücke betrachtet bzw. als Problemumgehung.

Siehe auch grundlegendes Anwendungsbeispiel im Handbuch und für weitere Vor- und Nachteile:

Aber es hat auf dem anderen Server funktioniert !?

Wenn Sie die Header-Warnung zuvor nicht erhalten haben, hat sich die Einstellung Ausgabepufferung php.ini geändert. Es ist wahrscheinlich auf dem aktuellen/neuen Server nicht konfiguriert.

Überprüfen mit headers_sent()

Sie können immer headers_sent() verwenden, um zu prüfen, ob es noch möglich ist, ... Header zu senden. Dies ist nützlich, um Informationen bedingt auszudrucken oder eine andere Fallback-Logik anzuwenden.

if (headers_sent()) {
    die("Redirect failed. Please click on this link: <a href=...>");
}
else{
    exit(header("Location: /user.php"));
}

Nützliche Problemumgehungen sind:

  • HTML <meta>-Tag

    Wenn Ihre Anwendung strukturell schwierig zu reparieren ist, können Sie Weiterleitungen auf einfache (aber unprofessionelle) Weise durch Einfügen eines HTML-Tags <meta> zulassen. Eine Weiterleitung kann erreicht werden mit:

     <meta http-equiv="Location" content="http://example.com/">
    

    Oder mit kurzer Verspätung:

     <meta http-equiv="Refresh" content="2; url=../target.html">
    

    Dies führt zu ungültigem HTML, wenn es nach dem Abschnitt <head> verwendet wird. Die meisten Browser akzeptieren das immer noch.

  • JavaScript-Weiterleitung

    Alternativ kann ein JavaScript-Weiterleitung für Seiten-Weiterleitungen verwendet werden:

     <script> location.replace("target.html"); </script>
    

    Dies ist zwar häufig HTML-konformer als die Umgehung von <meta>, erfordert jedoch die Verwendung von JavaScript-fähigen Clients.

Beide Ansätze machen jedoch akzeptable Ausfälle, wenn echte HTTP-Header () -Aufrufe fehlschlagen. Idealerweise kombinieren Sie dies immer mit einer benutzerfreundlichen Nachricht und einem anklickbaren Link als letzter Ausweg. (Was zum Beispiel die http_redirect () PECL-Erweiterung bewirkt.)

Warum sind auch setcookie() und session_start() betroffen?

Sowohl setcookie() als auch session_start() müssen einen Set-Cookie:-HTTP-Header senden. Es gelten daher die gleichen Bedingungen, und für vorzeitige Ausgabesituationen werden ähnliche Fehlermeldungen generiert.

(Natürlich sind sie auch von deaktivierten Cookies im Browser oder sogar Proxy-Problemen betroffen. Die Sitzungsfunktionalität hängt natürlich auch vom freien Speicherplatz und anderen php.ini-Einstellungen usw. ab.)

Weiterführende Links

2884
mario

Diese Fehlermeldung wird ausgelöst, wenn etwas gesendet wird, bevor Sie HTTP-Header (mit setcookie oder header senden =). Häufige Gründe für die Ausgabe vor den HTTP-Headern sind:

  • Versehentliches Leerzeichen, häufig am Anfang oder Ende von Dateien, wie folgt:

    _ <?php
    // Note the space before "<?php"
    ?>
    _

Um dies zu vermeiden, lassen Sie einfach das schließende _?>_ weg - es ist sowieso nicht erforderlich.

  • Bytereihenfolge am Anfang einer PHP-Datei. Untersuchen Sie Ihre PHP-Dateien mit einem Hex-Editor, um herauszufinden, ob dies der Fall ist. Sie sollten mit den Bytes _3F 3C_ beginnen. Sie können die Stückliste _EF BB BF_ sicher vom Dateianfang entfernen.
  • Explizite Ausgabe, z. B. Aufrufe von echo, printf, readfile, passthru, Code vor _<?_ usw.
  • Eine Warnung, die von PHP ausgegeben wird, wenn die Eigenschaft display_errors php.ini gesetzt ist. Anstatt bei einem Programmierfehler abzustürzen, behebt PHP den Fehler im Hintergrund und gibt eine Warnung aus. Während Sie die Konfigurationen display_errors oder error_reporting ändern können, sollten Sie das Problem lieber beheben.
    Häufige Gründe sind Zugriffe auf undefinierte Elemente eines Arrays (z. B. _$_POST['input']_ ohne Verwendung von empty oder isset , um zu testen, ob die Eingabe festgelegt ist. Oder verwenden Sie eine undefinierte Konstante anstelle eines Zeichenfolgenliteral (wie in _$_POST[input]_, beachten Sie die fehlenden Anführungszeichen).

Durch Einschalten von Ausgabepufferung sollte das Problem behoben werden. Alle Ausgaben nach dem Aufruf von ob_start werden im Speicher zwischengespeichert, bis Sie den Puffer freigeben, z. mit ob_end_flush .

Während die Ausgabepufferung die Probleme vermeidet, sollten Sie wirklich feststellen, warum Ihre Anwendung einen HTTP-Body vor dem HTTP-Header ausgibt. Das wäre, als würde man einen Anruf entgegennehmen und Ihren Tag und das Wetter besprechen, bevor man dem Anrufer mitteilt, dass er die falsche Nummer hat.

192
phihag

Ich habe diesen Fehler schon oft bekommen und bin mir sicher, dass alle PHP Programmierer mindestens einmal diesen Fehler bekommen haben. Um diesen Fehler zu beheben, können Sie die Lösung gemäß Ihrer Problemstufe verwenden:

Mögliche Lösung 1:

Möglicherweise haben Sie Leerzeichen hinterlassen vor oder nach (am Ende der Datei nach?>) d. H.

THERE SHOULD BE NO BLANK SPACES HERE
<?php  

   echo "your code here";

?>
DO CHECK FOR BLANK SPACES HERE AS WELL; THIS LINE (blank line) SHOULD NOT EXIST.

Die meiste Zeit sollte dies Ihr Problem lösen. Überprüfen Sie alle Dateien, die der Datei you require zugeordnet sind.

Hinweis: Manchmal fügt EDITOR (IDE) wie gedit (ein Standard-Linux-Editor) beim Speichern einer Datei eine Leerzeile hinzu. Dies sollte nicht passieren . Wenn Sie Linux verwenden. Mit dem VI-Editor können Sie Leerzeichen/Zeilen nach?> am Ende der Seite entfernen.

Wenn dies dann nicht der Fall ist, können Sie ob_start für die Ausgabepufferung wie folgt verwenden:

Mögliche Lösung 2:

<?php
  ob_start();

  // code 

 ob_end_flush();
?> 

Dadurch wird die Ausgabepufferung aktiviert und Ihre Header werden erstellt, nachdem die Seite gepuffert wurde.

114

Anstelle der unteren Zeile

//header("Location:".ADMIN_URL."/index.php");

schreiben

echo("<script>location.href = '".ADMIN_URL."/index.php?msg=$msg';</script>");

oder

?><script><?php echo("location.href = '".ADMIN_URL."/index.php?msg=$msg';");?></script><?php

Es wird definitiv Ihr Problem lösen. Ich hatte das gleiche Problem, aber ich habe es gelöst, indem ich die Header-Position wie oben beschrieben geschrieben habe.

83
Ipsita Rout

Sie machen

printf ("Hi %s,</br />", $name);

vor dem Setzen der Cookies, was nicht erlaubt ist. Sie können keine Ausgabe vor den Kopfzeilen senden, nicht einmal eine Leerzeile.

40
Seth Carnegie

Es liegt an dieser Zeile:

printf ("Hi %s,</br />", $name);

Sie sollten nicht print/echo vor dem Senden der Header.

32
Sarfraz

ALLGEMEINE PROBLEME:

(kopiert von: Quelle )

===================

1) es sollte keine Ausgabe geben (dh echo.. oder HTML-Codes) vor dem Befehl header(.......);.

2) entfernen Sie alle Leerzeichen (oder newline ) vor _<?php_ und nach _?>_.

3) GOLDEN RULE! - Überprüfen Sie, ob diese PHP-Datei (und auch , wenn Sie include andere Dateien haben) UTF8 ohne Stücklistencodierung (und nicht nur UTF-8 ). Das ist in vielen Fällen ein Problem (weil UTF8 codierte Datei am Anfang der PHP-Datei etwas Besonderes hat, was Ihr Texteditor nicht anzeigt) !! !!!!!!!!!

4) Nach header(...); müssen Sie _exit;_ verwenden

5) Verwenden Sie immer die Referenz 301 oder 302:

_header("location: http://example.com",  true,  301 );  exit;
_

6) Aktivieren Sie die Fehlerberichterstattung und suchen Sie den Fehler. Ihr Fehler kann durch eine nicht funktionierende Funktion verursacht werden. Wenn Sie die Fehlerberichterstattung aktivieren, sollten Sie immer zuerst den obersten Fehler beheben. Beispielsweise könnte dies "Warnung: date_default_timezone_get (): Es ist nicht sicher, sich auf die Zeitzoneneinstellungen des Systems zu verlassen." - Wenn Sie weiter unten sind, wird möglicherweise der Fehler "Header nicht gesendet" angezeigt. Laden Sie die Seite erneut, nachdem Sie den obersten (ersten) Fehler behoben haben. Wenn Sie immer noch Fehler haben, beheben Sie den obersten Fehler erneut.

7) Wenn keine der oben genannten Möglichkeiten hilfreich ist, verwenden Sie die JAVSCRIPT-Umleitung (jedoch keine empfohlene Methode). In Sonderfällen kann dies die letzte Chance sein ... :

_echo "<script type='text/javascript'>window.top.location='http://website.com/';</script>"; exit;
_
30
Jorn

Ein einfacher Tipp: Dies kann durch ein einfaches Leerzeichen (oder ein unsichtbares Sonderzeichen) in Ihrem Skript unmittelbar vor dem ersten <?php -Tag verursacht werden! Vor allem, wenn Sie in einem Team arbeiten und jemand ein "schwaches" IDE verwendet oder mit seltsamen Texteditoren in den Dateien herumgespielt hat.

Ich habe diese Dinge gesehen;)

26
Sliq

Eine andere schlechte Praxis kann dieses Problem hervorrufen, das noch nicht angegeben ist.

Siehe diesen Codeausschnitt:

<?php
include('a_important_file.php'); //really really really bad practise
header("Location:A location");
?>

Die Dinge sind in Ordnung, oder?

Was ist, wenn "a_important_file.php" wie folgt lautet:

<?php
//some php code 
//another line of php code
//no line above is generating any output
?>

 ----------This is the end of the an_important_file-------------------

Das wird nicht funktionieren? Warum? Weil bereits eine neue Zeile generiert wird.

Nun, obwohl dies kein alltägliches Szenario ist, was ist, wenn Sie ein MVC-Framework verwenden, das viele Dateien lädt, bevor Sie Dinge an Ihren Controller übergeben? Dies ist kein ungewöhnliches Szenario. Seien Sie darauf vorbereitet.

From PSR-2 2.2:


  • Alle PHP Dateien MÜSSEN das Unix LF (linefeed) line ending benutzen.
  • Alle PHP Dateien MÜSSEN mit einem single blank line enden.
  • Das schließende?> -Tag MUSS omitted aus Dateien sein, die only php enthalten

Glauben Sie mir, wenn Sie diesen Standards folgen, können Sie verdammt viele Stunden in Ihrem Leben sparen :)

21

Manchmal, wenn der Entwicklungsprozess sowohl WIN-Workstations als auch LINUX-Systeme (Hosting) enthält und im Code vor der zugehörigen Zeile keine Ausgabe angezeigt wird, kann dies an der Formatierung der Datei und dem Fehlen von nix LF (Zeilenvorschub Zeilenende.

Was wir normalerweise tun, um dies schnell zu beheben, ist, die Datei umzubenennen und auf dem LINUX-System eine neue Datei anstelle der umbenannten zu erstellen und dann den Inhalt in diese zu kopieren. Dadurch wird das Problem häufig behoben, da einige der in WIN erstellten Dateien, die einmal auf das Hosting verschoben wurden, dieses Problem verursachen.

Dieser Fix ist ein einfacher Fix für Websites, die wir über FTP verwalten, und kann unseren neuen Teammitgliedern manchmal Zeit sparen.

15
Lupin

Im Allgemeinen tritt dieser Fehler auf, wenn der Header nach dem Echo oder Drucken gesendet wird. Wenn dieser Fehler auf einer bestimmten Seite auftritt, vergewissern Sie sich, dass diese Seite keine Echos ausgibt, bevor Sie start_session() aufrufen.

Beispiel für einen unvorhersehbaren Fehler:

 <?php //a white-space before <?php also send for output and arise error
session_start();
session_regenerate_id();

//your page content

Ein weiteres Beispiel:

<?php
includes 'functions.php';
?> <!-- This new line will also arise error -->
<?php
session_start();
session_regenerate_id();

//your page content

Fazit: Geben Sie kein Zeichen aus, bevor Sie session_start() oder header() aufrufen, und verwenden Sie nicht einmal ein Leerzeichen oder eine neue Zeile

2