Sönke Tesch: header("http/1.1 303 See other");

Beitrag lesen

Brauche einen Reload in php. Hab in dem Forum eine Antwort gefunden. Nur ist mir unklar wo diese Einträge gesetzt werden? Direkt im Formular?

header("HTTP/1.1 303 See other");
wozu brauchst Du das? (Ist meiner Meinung nach eine Art Fehlrmeldung, so kann man auch 404er Seiten aufrufen)

Das ist keine Fehlermeldung, sondern eine ganz einfache Weiterleitung, die ein Skript senden kann, wenn es dem Benutzer statt einer eigenen Ausgabe eine andere Seite präsentieren möchte.
Fehler liegen im 400er und 500er Bereich. Siehe HTTP-Spezifikation unter http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html.

header("Location: http://".$SERVER["HTTP_HOST"]."/andere/seite.php");
dies hier kann überall stehen, solange vorher keine Aussgabe gemacht wurde.

Wobei zu ergänzen wäre, daß mit "Ausgabe" jedes Zeichen gemeint ist, auch diejenigen, die sich zwischen Dateianfang und dem ersten <?php befindet, inklusive Leerzeichen und den noch weniger offensichtlichen Zeilenschaltungen ("new line").

Der Grund ist, daß eine Antwort im HTTP-Protokoll aus einem Kopf und einem Körper besteht. Das, was normalerweise angezeigt wird, befindet sich im Körper, im Kopf stehen weitere Informationen zu den Körperdaten wie zum Beispiel Änderungsdatum, Datengröße oder -typ.
Da der Kopf vor dem Körper gesendet werden muß, können keine Kopfdaten mehr gesendet werden (mittels header()), wenn das Skript bereits mit dem Versand des Körpers begonnen hat.

Die Regel, daß header() vor allen Ausgabefunktionen stehen muß, gilt allerdings nur, solange output_buffering nicht eingeschaltet ist, d.h. solange PHP die Ausgaben des Skriptes _nicht_ erst zwischenspeichert.

Das ganze lässt sich übrigens leicht austesten: Wenn header() an der falschen Stelle (d.h. zu spät) steht, kommt eine Fehlermeldung à la "Cannot send headers - body already send".

Gruß,
  soenk.e