Wieso erhalte ich diese Fehlermeldung / Was bedeutet sie?
Hallo!
Ich habe einen PHP Code welcher den Benutzer an eine andere Seite weiterleiten soll. Zum Test auf Google.de:
header('Location: https://www.google.de');
exit();
Ich habe diesen Code schon bei anderen Seiten verwendet und es hat immer geklappt. Dieses Mal hat es allerdings eine Fehlermeldung gegeben und ich weiß nicht was sie bedeutet oder wie ich sie beheben kann:
Warning: Cannot modify header information - headers already sent by (output started at C:\Users\JanFe\OneDrive\Dokumente\PHPStorms_Projects\SSR_Webite(1)\layout\sidebar.php:19) in C:\Users\JanFe\OneDrive\Dokumente\PHPStorms_Projects\SSR_Webite(1)\kalender\popup.php on line 18
3 Antworten
irgendwas gibst du vorher aus und wenn das nur ein leerzeichen ist was vor deinem <?php ... ?> tags ist .
header daten werden vor dem body gesendet, ist schon irgendwas an body gesendet worden , kann es nicht mehr verarbeitet werden .
bau deine verarbeitung und umleitung vorher , dann wird sofort umgeleitet . wenn du das nachher haben willst weil dur wirklich was anzeigen willst und dann woanders hin , mach es mit javascript und einem timer damit der user auch sieht was passiert .
immer das EVA prinzip beachten ,
Eingabe
Verarbeitung
Ausgabe
gibts nichts auszugeben was der user sehen soll , ist die weiterleitung auf eine andere seite die ausgabe .
Du hast eine Ausgabe im Skript, irgendwo bevor die header Funktion aufgerufen wird, die musst du aufspüren und beseitigen. Also vermutlich ein echo, print, var_dump oder ähnliches. Möglicherweise befindet sich irgendwo vor den öffnenden PHP Tags (<?PHP) oder nach einem schließenden auch ein Whitespace- oder Leerzeichen, das übersieht man schon Mal. Überprüfe auch das Encoding deiner Datei, womöglich hast du sie mit einem BOM gespeichert, das sind 2 oder auch 3 Byte am Anfang der Datei, die dazu da sind, um die Byte-Reihenfolge anzugeben (die sieht man auch nicht). Sowas braucht man eigentlich nicht mehr, ist eher ein Legacy Konstrukt. Um sicher zu gehen, schau dir deine PHP Datei mit einem Hex Editor an, ich kann HxD sehr empfehlen. Wenn die ersten Bytes aus "EF BB BF", "FE FF" oder "FF FE" oder einer anderen unerwarteten Sequenz besteht, ist das vermutlich ein BOM. Alternativ Mal mit Notepad++ öffnen, das erkennt idR das Datei Encoding recht zuverlässig, und wenn dort UTF8/UTF16/UTF32 mit BOM steht, solltest du sie konvertieren, zum entsprechenden Zeichensatz aber eben ohne BOM. Das beste was du machen kannst (sagen wir der beste Kompromiss) ist, Dateien in UTF-8 ohne BOM abzulegen.
Rauszufinden wo ein Output stattfindet, kann eine nervtötende Suche sein, aber jetzt hast du ein paar Anhaltspunkte die dir helfen sollten, dieser Ursache auf die Spur zu kommen :)
Wieso erhalte ich diese Fehlermeldung
Weil bereits etwas ausgegeben wurde (zum Beispiel mittels echo), bevor du die Weiterleitung gesetzt hast.
Alex
Wieso hat den echo an einer ganz anderen Stelle Auswirkungen auf die header Funktion?
Weil die header Funktion natürlich nur dann aufgerufen werden darf, solange sonst noch keine Inhalte ausgegeben wurden.
Gibt es eine Alternative wie ich den Nutzer an eine anderer Website weiterleiten kann trotz der Verwendung von echo davor?
Gibt es eine Alternative wie ich den Nutzer an eine anderer Website weiterleiten kann trotz der Verwendung von echo davor?
Erst abfragen, ob weitergeleitet werden soll und danach eine evtl. Ausgabe mit echo machen.
Für was das echo davor? Wenn du weiterleitest, sieht die Ausgabe doch eh niemand.
machs mit javascript was du ausgibst
echo <<<ENDE
<script>
window.location.assign("https://www.google.de");
</script>
ENDE;
Ich habe mittlerweile eine alternative mit Mischung aus PHP und JavaScript gefunden. Es wird erst header ausgeführt und wenn das nicht klappt mir JavaScript
aus fehlern lernt man .
Er fragt wie es richtig geht, du gibst ihm eine unsinnige Antwort und garnierst das mit der Aussage "aus Fehlern lernt man".
So ganz hast du den Sinn einer Ratgeberplattform nicht verstanden ...
Ich habe mittlerweile eine alternative mit Mischung aus PHP und JavaScript gefunden.
Das ist grottenschlecht, unsinnig und evtl. gefährlich. Was spricht dagegen, gleich richtiges PHP zu programmieren?
ich kenne viele andere beispiele , wo leute nie fehler machen und 10 jahre später gehen sie dann auf den straßenstrich oder stehen am bahnhof .
aber ich geb dir recht, seine doppellösung ist eher eine komplette katastrophe .
Wieso hat den echo an einer ganz anderen Stelle Auswirkungen auf die header Funktion?