So beheben Sie den Fehler "Header bereits gesendet" in PHP

Nov 07 2011

Beim Ausführen meines Skripts werden folgende Fehler angezeigt:

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

Die in den Fehlermeldungen genannten Zeilen enthalten header()und setcookie()ruft auf.

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

Antworten

3066 mario Nov 07 2011 at 00:45

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: Header-Informationen können nicht geändert werden - Header wurden bereits gesendet (Ausgabe gestartet am Skript: Zeile )

Einige Funktionen, die den HTTP-Header ändern, sind:

  • header /. header_remove
  • session_start /. session_regenerate_id
  • setcookie /. setrawcookie

Die Ausgabe kann sein:

  • Unbeabsichtigt:

    • Leerzeichen vorher <?phpoder nachher?>
    • Das UTF-8-Byte-Bestellzeichen speziell
    • Vorherige Fehlermeldungen oder Hinweise
  • Absichtlich:

    • print, echoUnd andere Funktionen zum Erzeugen von Ausgang
    • Roher <html>Abschnitt vorheriger <?phpCode.

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 den ersten Ausgang empfängt ( print, echo, <html>) wird es bündig alle gesammelten Header. 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 header()Warnung enthält alle relevanten Informationen zum Auffinden der Problemursache:

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

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

Der Hinweis " Ausgabe gestartet um " in der Klammer ist wichtiger. Es bezeichnet die Quelle der vorherigen Ausgabe. In diesem Beispiel ist es auth.phpund Linie52 . Dort musste man nach vorzeitiger Ausgabe suchen.

Typische Ursachen:

  1. Drucken, Echo

    Durch die absichtliche Ausgabe von printund echoAnweisungen wird die Möglichkeit zum Senden von HTTP-Headern beendet. Der Anwendungsfluss muss umstrukturiert werden, um dies zu vermeiden. Verwenden Sie Funktionen und Vorlagenschemata. Stellen Sie sicher, dass header()Anrufe erfolgen, 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 .phpDatei werden ebenfalls direkt ausgegeben. Skriptbedingungen, die einen header()Aufruf auslösen , müssen vor allen Rohblöcken notiert <html>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 zu verschieben.
    • Die eigentliche Ausgabelogik und die gemischte HTML-Ausgabe sollten zuletzt folgen.

  3. Leerzeichen vor <?phpfür "script.php Zeile 1 " Warnungen

    Wenn sich die Warnung auf die Ausgabe in Zeile bezieht 1, handelt es sich meistens um führende Leerzeichen , Text oder HTML vor dem öffnenden <?phpToken.

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

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

    ?>
    
    <?php
    

    PHP frisst tatsächlich einen einzelnen Zeilenumbruch nach dem Schließen von Tags auf. Es werden jedoch nicht mehrere Zeilenumbrüche oder Tabulatoren oder Leerzeichen ausgeglichen, die in solche Lücken verschoben wurden.

  4. UTF-8-Stückliste

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

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

    Dort ist das Problem leicht zu erkennen. Andere Editoren identifizieren möglicherweise das Vorhandensein in einem Datei- / Einstellungsmenü (Notepad ++ unter Windows kann das Problem identifizieren und beheben ). Eine weitere Option zum Überprüfen des Vorhandenseins von Stücklisten besteht darin, auf einen Hexeditor zurückzugreifen . On * nix-Systeme hexdumpsind normalerweise verfügbar, wenn nicht eine grafische Variante, die die Prüfung dieser und anderer Probleme vereinfacht:

    Eine einfache Lösung besteht darin, den Texteditor so einzustellen, dass Dateien als "UTF-8 (keine Stückliste)" oder eine ähnliche Nomenklatur gespeichert werden. Oft greifen Neulinge ansonsten dazu, neue Dateien zu erstellen und den vorherigen Code einfach wieder zu kopieren und einzufügen.

    Korrekturdienstprogramme

    Es gibt auch automatisierte Tools zum Überprüfen und Umschreiben von Textdateien ( sed/awk oder recode). Für PHP gibt es speziell das phptagsTag aufgeräumter . Es schreibt geschlossene und geöffnete Tags in lange und kurze Formulare um, behebt aber auch problemlos führende und nachfolgende Whitespace-, Unicode- und UTF-x-Stücklistenprobleme:

    phptags  --whitespace  *.php
    

    Es ist vernünftig, ein gesamtes Include- oder Projektverzeichnis zu verwenden.

  5. Leerzeichen nach ?>

    Wenn die Fehlerquelle als hinter dem Schließen?> stehend erwähnt wird, wurde hier ein Leerzeichen oder Rohtext ausgeschrieben. Der PHP-Endmarker beendet die Skriptausführung zu diesem Zeitpunkt nicht. Alle nachfolgenden Text- / Leerzeichen werden weiterhin als Seiteninhalt ausgeschrieben.

    Insbesondere Neulingen wird allgemein empfohlen, nachfolgende ?>PHP-Close-Tags wegzulassen. Dies vermeidet einen kleinen Teil dieser Fälle. (Sehr häufig sind include()dSkripte der Schuldige.)

  6. Fehlerquelle als "Unbekannt in Zeile 0"

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

    • Es ist gelegentlich die gzipStream-Codierungseinstellung oder dieob_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 dazu führt, dass eine Warnmeldung oder ein Hinweis ausgedruckt wird, gilt dies auch als vorzeitige Ausgabe.

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

Keine Fehlermeldung

Wenn Sie error_reportingoder display_errorsdeaktiviert pro php.ini, dann zeigt keine Warnung auf. 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: ...")Umleitungen stillschweigend fehlschlagen, ist es sehr ratsam, nach Warnungen zu suchen. Aktivieren Sie sie mit zwei einfachen Befehlen über dem Aufrufskript erneut:

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

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

Wenn Sie von Redirect-Headern sprechen, sollten Sie häufig eine solche Redewendung für endgültige Codepfade verwenden:

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

Am besten sogar eine Utility-Funktion, die bei header()Fehlern eine Benutzermeldung druckt .

Ausgabepufferung als Problemumgehung

Die Ausgabepufferung von PHPs 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 besteht darin, die Übertragung von Chunks auf den Webserver zu minimieren.

  1. Die output_buffering=Einstellung kann trotzdem helfen. Konfigurieren Sie es in der php.ini oder über .htaccess oder sogar .user.ini in modernen FPM / FastCGI-Setups.
    Durch Aktivieren kann PHP die Ausgabe puffern, anstatt sie sofort an den Webserver weiterzuleiten. PHP kann somit HTTP-Header aggregieren.

  2. Es kann ebenfalls mit einem Aufruf zum ob_start();Aufrufen des Aufrufskripts verbunden werden. Was jedoch aus mehreren Gründen weniger zuverlässig ist:

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

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

    • Der Puffer ist in seiner Größe begrenzt und kann leicht überlaufen, wenn die Standardeinstellungen beibehalten werden. Und das ist auch keine Seltenheit, schwer zu finden, 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 allgemein nur als Krücke / strikte Problemumgehung betrachtet.

Siehe auch das grundlegende Verwendungsbeispiel im Handbuch und weitere Vor- und Nachteile:

  • Was ist Ausgabepufferung?
  • Warum Ausgabepufferung in PHP verwenden?
  • Wird die Verwendung der Ausgabepufferung als schlechte Praxis angesehen?
  • Anwendungsfall für die Ausgabepufferung als richtige Lösung für "bereits gesendete Header"

Aber es hat auf dem anderen Server funktioniert!?

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

Überprüfen mit headers_sent()

Sie können jederzeit headers_sent()prüfen, ob es noch möglich ist, ... Header zu senden. Dies ist nützlich, um eine Information 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 Fallback-Problemumgehungen sind:

  • HTML- <meta>Tag

    Wenn Ihre Anwendung strukturell schwer zu reparieren ist, können Sie auf einfache (aber etwas unprofessionelle) Weise, um Weiterleitungen zuzulassen, ein HTML- <meta>Tag einfügen. Eine Weiterleitung kann erreicht werden mit:

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

    Oder mit kurzer Verzögerung:

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

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

  • JavaScript-Umleitung

    Alternativ kann eine JavaScript-Umleitung für Seitenumleitungen verwendet werden:

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

    Dies ist häufig HTML-kompatibler als die <meta>Problemumgehung, erfordert jedoch JavaScript-fähige Clients.

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

Warum setcookie()und session_start()sind auch betroffen

Beides setcookie()und 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 außerdem von deaktivierten Cookies im Browser oder sogar von Proxy-Problemen betroffen. Die Sitzungsfunktionalität hängt natürlich auch vom freien Speicherplatz und anderen php.ini-Einstellungen usw. ab.)

Weitere Links

  • Google bietet eine lange Liste ähnlicher Diskussionen .
  • Und natürlich wurden auch viele spezielle Fälle beim Stapelüberlauf behandelt.
  • In den häufig gestellten Fragen zu Wordpress wird erläutert, wie ich das Problem mit den bereits gesendeten Headern lösen kann. in einer generischen Weise.
  • Adobe Community: PHP-Entwicklung: Warum Weiterleitungen nicht funktionieren (Header bereits gesendet)
  • Nucleus FAQ: Was bedeutet "bereits gesendete Seitenkopfzeilen"?
  • Eine der ausführlicheren Erklärungen sind HTTP-Header und die PHP-Header () -Funktion - Ein Tutorial von NicholasSolutions (Link zum Internetarchiv). Es behandelt HTTP im Detail und enthält einige Richtlinien zum Umschreiben von Skripten.
203 phihag Nov 07 2011 at 00:44

Diese Fehlermeldung wird ausgelöst, wenn etwas gesendet wird, bevor Sie HTTP-Header (mit setcookieoder 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ßen weg ?>- es ist sowieso nicht erforderlich.

  • Byte-Ordnungsmarkierungen 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 beginnen 3F 3C. Sie können die Stückliste sicher vom Dateianfang entfernen EF BB BF.
  • Explizite Ausgabe, wie Anrufe echo, printf, readfile, passthru, Code vor <?usw.
  • Eine von php ausgegebene Warnung, wenn die display_errorsEigenschaft php.ini festgelegt ist. Anstatt bei einem Programmiererfehler abzustürzen, behebt PHP den Fehler stillschweigend und gibt eine Warnung aus. Während Sie die Konfigurationen display_errorsoder 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 emptyoder issetzum Testen, ob die Eingabe festgelegt ist) oder die Verwendung einer undefinierten Konstante anstelle eines Zeichenfolgenliteral (wie in $_POST[input], beachten Sie die fehlenden Anführungszeichen).

Durch Aktivieren der Ausgabepufferung sollte das Problem behoben werden. Alle Ausgaben nach dem Aufruf von werden ob_startim Speicher gepuffert, bis Sie den Puffer freigeben, z ob_end_flush. B. mit .

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

126 ManishShrivastava Aug 01 2012 at 13:43

Ich habe diesen Fehler schon oft erhalten, und ich bin sicher, dass alle PHP-Programmierer diesen Fehler mindestens einmal zuvor erhalten haben.

Mögliche Lösung 1

Dieser Fehler wurde möglicherweise durch Leerzeichen vor dem Start der Datei oder nach dem Ende der Datei verursacht. Diese Leerzeichen sollten nicht hier sein.

ex) HIER SOLLTEN KEINE LEEREN RAUME SEIN

   echo "your code here";

?>
THERE SHOULD BE NO BLANK SPACES HERE

Überprüfen Sie alle Dateien, die der Datei zugeordnet sind, die diesen Fehler verursacht.

Hinweis: Manchmal fügen EDITOR (IDE) wie gedit (ein Standard-Linux-Editor) eine leere Zeile zur Sicherungsdatei hinzu. Dies sollte nicht passieren. Wenn Sie Linux verwenden. Sie können den VI-Editor verwenden, um Leerzeichen / Zeilen nach?> am Ende der Seite zu entfernen.

Mögliche Lösung 2: Wenn dies nicht der Fall ist, verwenden Sie ob_start, um die Pufferung auszugeben:

<?php
  ob_start();

  // code 

 ob_end_flush();
?> 

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

90 IpsitaRout Mar 24 2013 at 19:54

Anstelle der folgenden 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 Position des Headers auf die oben beschriebene Weise geschrieben habe.

41 SethCarnegie Nov 07 2011 at 00:45

Sie machen

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

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

34 T.Todua Apr 10 2015 at 02:22

ALLGEMEINE PROBLEME:

(kopiert von: Quelle )

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

1)echo.. Vor dem header(.......);Befehl sollte keine Ausgabe (dh oder HTML-Code) erfolgen .

2) Entfernen Sie Leerzeichen (oder Zeilenumbrüche ) vor <?phpund nach ?>Tags.

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

4) Nachdem header(...);Sie verwenden müssenexit;

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 Funktion verursacht werden, die nicht funktioniert. Wenn Sie die Fehlerberichterstattung aktivieren, sollten Sie immer zuerst den häufigsten Fehler beheben. Beispielsweise könnte es sein: "Warnung: date_default_timezone_get (): Es ist nicht sicher, sich auf die Zeitzoneneinstellungen des Systems zu verlassen." - dann weiter unten sehen Sie möglicherweise den Fehler "Header nicht gesendet". Laden Sie Ihre Seite erneut, nachdem Sie den obersten (1.) Fehler behoben haben. Wenn Sie immer noch Fehler haben, beheben Sie erneut den obersten Fehler.

7) Wenn keiner der oben genannten Punkte hilft, verwenden Sie die JAVSCRIPT-Umleitung (jedoch eine stark nicht empfohlene Methode). Dies kann in benutzerdefinierten Fällen die letzte Chance sein ...:

echo "<script type='text/javascript'>window.top.location='http://website.com/';</script>"; exit;
33 Sarfraz Nov 07 2011 at 00:45

Es liegt an dieser Zeile:

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

Sie sollten vor dem Senden der Header nichts drucken / wiedergeben .

27 Sliq May 17 2012 at 03:37

Ein einfacher Tipp: Ein einfaches Leerzeichen (oder ein unsichtbares Sonderzeichen) in Ihrem Skript direkt vor dem ersten <?phpTag kann dies verursachen! Besonders wenn Sie in einem Team arbeiten und jemand eine "schwache" IDE verwendet oder mit seltsamen Texteditoren in den Dateien herumgespielt hat.

Ich habe diese Dinge gesehen;)

22 MD.SahibBinMahboob Nov 08 2013 at 08:29

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

Siehe diesen Code-Ausschnitt:

<?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" dies ist:

<?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.

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. Bereite dich darauf vor.

Aus PSR-2 2.2:


  • Alle PHP-Dateien MÜSSEN die verwenden Unix LF (linefeed) line ending.
  • Alle PHP-Dateien MÜSSEN mit a enden single blank line.
  • Das schließende?> -Tag MUSS omittedaus Dateien stammen, die enthaltenonly php

Glauben Sie mir, das Befolgen dieser Standards kann Ihnen verdammt viele Stunden Ihres Lebens ersparen :)

16 Lupin May 22 2015 at 03:39

Manchmal , wenn der Entwickler Prozess sowohl WIN Arbeitsplätze und Linux - Systemen hat (Hosting) und in dem Code , den Sie keine Ausgabe , bevor die betreffende Zeile sehen Sie, könnte es die Formatierung der Datei und den Mangel an sein Unix LF (Zeilenvorschub) Zeilenende .

Um dies schnell zu beheben, benennen wir die Datei normalerweise um und erstellen auf dem LINUX-System eine neue Datei anstelle der umbenannten und kopieren dann den Inhalt in diese. Oft löst dies das Problem, da einige der Dateien, die in WIN erstellt wurden, nachdem sie auf das Hosting verschoben wurden, dieses Problem verursachen.

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

3 BiswadeepSarkar Feb 03 2015 at 11:50

Im Allgemeinen tritt dieser Fehler auf, wenn wir nach dem Echo oder Drucken einen Header senden. Wenn dieser Fehler auf einer bestimmten Seite auftritt, stellen Sie sicher, dass auf dieser Seite nichts wiedergegeben wird, bevor Sie aufrufen start_session().

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

Noch ein Beispiel:

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

//your page content

Fazit: Geben Sie vor dem Aufruf kein Zeichen aus session_start()oder arbeiten Sie header()nicht einmal ein Leerzeichen oder eine neue Zeile