header("location... Problem

Katzehuhn

Erfahrenes Mitglied
Ich versteh den Befehl Header Location einfach nicht, ab und zu funktioniert er und ab u zu wieder nicht zb:

Ich hab stehen:
PHP:
  header("Location: index.php?site=status");
  $statusup = "";
  	$hero = "";
  	$hp = "";
es funktioniert, wenn ich header location als letztes stehen hab kommt meldung, header already send by..

kann mir jemand erklären wie dieser Befehl funktioniert? danke^^
edit: wenn ich bei meinen Script dieses echo lösche funktioniert der header befehl ( er steht bei ner if abfrage u refresht die seite wenn bestimmte variablen gegeben sind)
PHP:
 echo "<tr><td><b>Helm</b></td><td><b>Brust</b></td><td><b>R. Hand</b></td><td><b>L. Hand</b></td><td><b>Hose</b></td><td><b>L. Arm</b></td><td><b>R. Arm</b></td><tr>";
 
Zuletzt bearbeitet:
Hallo, du benutzt einen header befehl. Dieser muss vor jeder anderen Art Code ausgeführt werden. Das heißt wenn du z.b. ne seite hast wo drin steht:

PHP:
<?php
echo "<center>Hallo Test</center>";

header("Location: index.php?site=status");

?>

So wird es nicht funktionieren, da nun schon ein header gesendet wurde. So würde es gehen:
PHP:
<?php

header("Location: index.php?site=status");

echo "<center>Hallo Test</center>";

?>

Gruß
Chan
 
bei mir steht der header befehl in eigentlich jeden Script am Ende und das funktioniert? gibts net ne andere möglichkeit ne Seite dann automatisch aufzurufen? da header befehl macht eigentlich immer nur probleme ( die meta refresh lösung geht net u js mag ich ma auslassen)
 
Hallo!

Das schöne an einer Fehlermeldung ist, dass man diese lesen kann! :confused:

Mit diesem Befehl werden HTTP-Header an den Browser geschickt. Diese müssen immer vor dem Inhalt der Webseite (o. ä.) gesendet werden. Wird aber versucht, einen Header nach dem Senden von Inhalt an den Browser zu schicken, kommt diese Fehlermeldung.
Am einfachsten ist es, die Ausgabenpufferung zu aktivieren, um den Inhalt der Seite (das, was du per echo ausgibst ;) ) erst dann an den Browser senden zu lassen, wenn das Script komplett durchlaufen ist.
Dazu musst du das am Anfang des Scripts schreiben (es dürfen keine Leerzeichen, Kommentare o. a. davor stehen):

PHP:
<?php
ob_start (); // Pufferung aktivieren
?>

Das muss ans Ende des Scripts:

PHP:
<?php
ob_end_flush () // Pufferung deaktivieren und Inhalt an den Browser senden
?>

PS:
Nachdem du den Header gesendet hast, solltest du das Script ohne Ausgabe direkt beenden. Beispiel:

PHP:
<?php
ob_start ();

if ($_GET['site'] == 'status')
{
    header ('Location: index.php?site=status');
    exit;
}

echo 'Wilkommen auf meiner Seite';

ob_end_flush ();
?>
 
Wenn man den header richtig setzt ist er eigentlich zuverlässig ;-)

Aber als alternative kann man im php code auch Meta benutzen also Beispiel:

PHP:
echo "<meta http-equiv=\"refresh\" content=\"3; URL=index.php\">";

Greetz
 
Naja, das ist aber auch nicht DIE Lösung!
Was ist denn, wenn bereits der Header-Tag bereits beendet wurde?
Wenn MetaRefresh, dann lieber auch mit PHP-Headern:

PHP:
header('Refresh: 5; url=http://domain.net/url.php');
 
Ja root, das weiß ich auch aber es ist eine einfache Lösung die funktioniert :-) Vor allem für leute die noch nicht so viel Kenntnisse in PHP haben. Woher soll ein anfänger wissen wann und wo man das header Tag richtig setzt? :)
 
Naja, woher kann man soetwas erfahren?
Wie wer's denn hiermit? ;)

Beachten Sie, dass header() aufgerufen werden muss, bevor eine Ausgabe gesendet wurde, egal ob normale HTML Tags, leere Zeilen in einer Datei oder von PHP. Ein weit verbreiteter Fehler ist mittels include(), require(), oder anderen Dateizugriffsmethoden Code zu lesen, und so unbewusst Leerzeichen oder Leerzeilen auszugeben, bevor header() aufgerufen wird. Das gleiche Problem besteht auch bei Verwendung einer einzigen PHP/HTML Datei.

Was bei Fehlermeldungen, die man nicht kennt, sehr nützlich sein kann:

http://www.google.de/search?hl=de&q=header+already+send+by&btnG=Suche&meta=
 
Zuletzt bearbeitet:
Zurück