1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

Fehler: Warning: Cannot modify header information

Dieses Thema im Forum "PHP" wurde erstellt von Umbriell, 30. Dezember 2016.

  1. Umbriell

    Umbriell Mitglied

    Hallo,

    ich bekomme wenn ich meine Website auf den Server stelle diese Fehlermeldung.beim Aufruf:

    "Warning: Cannot modify header information - headers already sent by (output started at /usr/www/users/web/TEST.php:1) in /usr/www/users/web/TEST.php on line 4"

    Code (PHP):
    1. <?php
    2. ini_set('display_errors',true);
    3. header('Location:login.php');
    4. ?>
    Das ist der komplette Code in der Datei. Ich bekomme den gleichen Fehler in der Original-Seite und habe bis auf diese paar Zeilen alles rausgeschmissen. Was verursacht den Fehler und wie kann ich ihn beheben?

    Lokal im XAMPP funktioniert alles.

    Besten Dank im Voraus.

    VG
    Umbriell
     
  2. SpiceLab

    SpiceLab ZENmechanic Premium-User

    Vor header() darf keinerlei Form einer Ausgabe erfolgen. Hierzu zählt auch ein Leerzeichen oder Zeilenumbruch zu Beginn des Codes (vor <?php).

    Der Klassiker eben. Und Google kennt ihn auch, wenn der Wortlaut der Fehlermeldung (oder Thementitel) genannt wird.
    1. http://de2.php.net/manual/de/function.header.php
    2. http://www.vlmedia.de/304/haufiger-php-error-cannot-modify-header-information-headers-already-sent
    3. https://www.arclab.com/en/kb/php/ph...-header-information-headers-already-sent.html
    4. ...
    [edit]Tipp-Ex[/edit]
     
    Zuletzt bearbeitet: 30. Dezember 2016
  3. Umbriell

    Umbriell Mitglied

    Hi,
    danke für die Antwort.

    Aber auch nach dem Entfernen aller möglichen Ausgaben wird nicht weitergeleitet.
    Ich habe jetzt mal dies getestet und bekomme eine leere Seite angezeigt:

    Code (PHP):
    1. <?php
    2. header('Location:http://www.google.com');
    3. ?>
    Ich versteh nicht, wieso das im web nicht funktioniert bei mir lokal aber doch.
    Hast Du eine Erklärung für mich?

    VG
    Umbriell
     
  4. SpiceLab

    SpiceLab ZENmechanic Premium-User

    Der Code funktioniert bei mir erwartungsgemäß auf beiden Servern (lokal & online).

    Bewegst Du Dich im Netz auf einem HTTPS-Server?

    Dann versuch es von dort aus mal ohne den Protokoll-Präfix http: im URL:
    Code (PHP):
    1. <?php
    2. header('Location: //www.google.com');
    3. ?>
     
  5. Umbriell

    Umbriell Mitglied

    Ist ken HTTPS. Die Datei ist UTF8 ohne BOM kodiert.
    Ich suche jetzt schon die ganze Zeit nach einer Einstellung in der Serverkonfiguration, die das ganze unterbinden könnte.
    Da finde ich aber auch nichts und ich wüßte auch nicht, warum die Möglichkeit geblockt werden sollte.

    Fällt Dir noch was ein?

    VG
    Umbriell
     
  6. SpiceLab

    SpiceLab ZENmechanic Premium-User

    Im Moment nicht.
     
  7. SpiceLab

    SpiceLab ZENmechanic Premium-User

    In meinem Serverlog taucht die erfolgreiche Weiterleitung (HTTP-Status 302) auf:
    Code (Apache configuration):
    1. *IP anonymisiert* - - [30/Dec/2016:22:44:52 +0100] "GET /headerlocation.php HTTP/1.0" 302 208 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36"
     
  8. EuroCent

    EuroCent KlappStuhl 2.0

    Was passiert denn wenn Du folgendes versuchst :)

    PHP:
    1. <?php
    2. header('LOCATION: http://www.google.de');
    3. ?>
    oder:
    PHP:
    1. <?php
    2. @header('LOCATION: http://www.google.de');
    3. ?>
    Theoretisch sollte das klappen :)

    Ich verwende die erste Funktion und diese klappt bei Mir :)
     
  9. Umbriell

    Umbriell Mitglied

    Bei beiden wird wieder die leere Seite angezeigt. Die Anzeige in der Adresszeile des Browsers bleibt unverändert.

    Ich tappe komplett im Dunkeln. Hat noch jemand eine Idee woran es liegen kann?

    VG
    Umbriell
     
  10. SpiceLab

    SpiceLab ZENmechanic Premium-User

    Ich gehe davon aus, dass sich @Umbriell mit meinen eingangs empfohlenen Links gestern auseinandergesetzt, und die diversen Lösungsvarianten durchgespielt hat.

    Deine Empfehlung mit ob_***() ist dort nämlich auch auf der Liste :
    Zitat-Quelle: http://www.vlmedia.de/304/haufiger-...der-information-headers-already-sent#behebung

    Gäbe es nicht besagte PHP-Fehlermeldung, könnte man ja fast annehmen, dass auf dem Server kein PHP läuft :confused:

    Hast Du mal die Server-/Error-Logs vom gestrigen Abend studiert, was darin bei Deinen einzelnen Aktionen festgehalten wurde?

    Siehe mein gestriger letzter Post:
     
  11. SpiceLab

    SpiceLab ZENmechanic Premium-User

    Bitte überprüfen, ob Du auch tatsächlich alles berücksichtigt hast: http://php.net/manual/de/configuration.php

    Wenn dem so sein sollte, kann mit phpinfo() auf beiden Servern ein Vergleich der Server-/PHP-Konfigurationen durchgeführt werden, um mutmaßliche Unterschiede zu entdecken, die einen Hinweis auf die Fehlerursache geben könn(t)en.
    Code (PHP):
    1. <?php
    2. ?>
    http://php.net/manual/de/function.phpinfo.php

    Beachte hierbei auch die Möglichkeit, die Ausgabe durch Parameter gezielt zu filtern, damit die ellenlange Liste einen nicht erschlägt :cool:

    http://php.net/manual/de/function.phpinfo.php#refsect1-function.phpinfo-parameters

    [edit]Tipp-Ex[/edit]
     
    Zuletzt bearbeitet: 31. Dezember 2016
  12. Umbriell

    Umbriell Mitglied

    Hi,

    Lokal habe ich die Version 7.0.13
    Online ist die Version 7.0.14

    Lokal ist eine Tabelle "HTTP Headers Information" vorhanden. Diese fehlt in der online PHP-Info.

    Ich gehe davon aus, dass die unterschiedlichen Versionen hier nicht ausschlaggebend sind, ob das Fehlen der Tabelle der springende Punkt ist weiß ich leider nicht.
    Kann das sein und wenn ja, wie kann ich diesen Punkt dann in der Konfiguration aktivieren?

    http://php.net/manual/de/configuration.php geh ich gerade durch.

    VG
    Umbrielle
     
  13. SpiceLab

    SpiceLab ZENmechanic Premium-User

    Sowas ist mir auch noch nicht untergekommen, aber man lernt ja bekanntlich nie aus, und so kann es durchaus möglich sein, dass das der Grund ist.

    https://de.wikipedia.org/wiki/Liste_der_HTTP-Headerfelder#Antwort-Headerfelder
    http://httpd.apache.org/docs/current/mod/mod_headers.html
     
  14. Umbriell

    Umbriell Mitglied

    Hi,

    das Problem ist behoben. Die Dateien waren doch mit BOM kodiert. Keine Ahnung warum die Anzeige im Editor nicht passte.

    Ich habe diesen Code einmal in dem Verzeichnis aufgerufen und wider erwarten wurden sämtliche Dateien umkodiert:

    Code (PHP):
    1. <?php
    2. // Tell me the root folder path.
    3. // You can also try this one
    4. // $HOME = $_SERVER["DOCUMENT_ROOT"];
    5. // Or this
    6. // dirname(__FILE__)
    7. $HOME = dirname(__FILE__);
    8.  
    9. // Is this a Windows host ? If it is, change this line to $WIN = 1;
    10. $WIN = 0;
    11.  
    12. // That's all I need
    13. ?>
    14. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    15. <html xmlns="http://www.w3.org/1999/xhtml">
    16. <head>
    17. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    18. <title>UTF8 BOM FINDER and REMOVER</title>
    19. <style>
    20. body { font-size: 10px; font-family: Arial, Helvetica, sans-serif; background: #FFF; color: #000; }
    21. .FOUND { color: #F30; font-size: 14px; font-weight: bold; }
    22. </style>
    23. </head>
    24. <body>
    25. <?php
    26. $BOMBED = array();
    27. RecursiveFolder($HOME);
    28. echo '<h2>These files had UTF8 BOM, but i cleaned them:</h2><p class="FOUND">';
    29. foreach ($BOMBED as $utf) { echo $utf ."<br />\n"; }
    30. echo '</p>';
    31.  
    32. // Recursive finder
    33. function RecursiveFolder($sHOME) {
    34.   global $BOMBED, $WIN;
    35.  
    36.   $win32 = ($WIN == 1) ? "\\" : "/";
    37.  
    38.   $folder = dir($sHOME);
    39.  
    40.   $foundfolders = array();
    41.   while ($file = $folder->read()) {
    42.    if($file != "." and $file != "..") {
    43.      if(filetype($sHOME . $win32 . $file) == "dir"){
    44.        $foundfolders[count($foundfolders)] = $sHOME . $win32 . $file;
    45.      } else {
    46.        $content = file_get_contents($sHOME . $win32 . $file);
    47.        $BOM = SearchBOM($content);
    48.        if ($BOM) {
    49.          $BOMBED[count($BOMBED)] = $sHOME . $win32 . $file;
    50.  
    51.          // Remove first three chars from the file
    52.          $content = substr($content,3);
    53.          // Write to file
    54.          file_put_contents($sHOME . $win32 . $file, $content);
    55.        }
    56.      }
    57.    }
    58.   }
    59.   $folder->close();
    60.  
    61.   if(count($foundfolders) > 0) {
    62.    foreach ($foundfolders as $folder) {
    63.      RecursiveFolder($folder, $win32);
    64.    }
    65.   }
    66. }
    67.  
    68. // Searching for BOM in files
    69. function SearchBOM($string) {
    70.    if(substr($string,0,3) == pack("CCC",0xef,0xbb,0xbf)) return true;
    71.    return false;
    72. }
    73. ?>
    74. </body>
    75. </html>
    Besten Dank für die Beiträge.

    VG
    Umbriell
     
  15. SpiceLab

    SpiceLab ZENmechanic Premium-User

    Als hätte ich es nicht geahnt, nach den Live-Tests auf meinen Servern (lokal + online), die ein Leerzeichen oder Zeilenumbruch als Ursache defintiv ausgeschlossen hatten, weil ich Deinen gezeigten Code selbstverständlich per "Copy&Paste" übernommen habe, um letzte Gewissheit zu haben :-]
    Ich auch nicht.

    Woher auch, wenn ich noch nicht mal eine Ahnung davon habe, mit welchem Editor Du arbeitest :D
     
  16. Umbriell

    Umbriell Mitglied

    Hi Spicelab,
    als Editor benutze ich notepadd++. Damit arbeite ich eigentlich sehr gerne und bisher hat er mich auch noch nicht enttäuscht.
    Evtl. ist auch beim Upload irgendwas passiert, da es bei mir lokal ja lief. Was auch immer der Grund war, jetzt funktioniert es.
    Nur ärgerlich um die Zeit, die da jetzt unnötigerweise drin steckt.

    Nochmal besten Dank für Deine Hilfe!

    VG
    Umbriell
     
Die Seite wird geladen...