Header-Problem

Hallo Leute,

folger Code ist die index.php, also die erste Datei auf’m Web die angesprochen wird.
–snip–

<?php header('Location: login/login.php');exit;
?\> --snap-- Folge: ich bekomme folgender Fehler: Warning: Cannot modify header information - headers already sent by... und zeigt auf die Zeile mit den 'header(Location...)' aufruf. Frage: Was habe ich da falsch gemacht? Gruss Marc

Hallo,

Du darfst vor einem Aufruf von Header() keine Zeichen gesendet haben, da ansonsten der normale HTML Header gesendet wird. Da Deine Seite ja nichts anzeigen braucht, reicht es auch völlig den ganzen HTMl Kram wegzulassen und direkt per Header() weiterzuverweisen.

Alternativ kannst Du in PHP auch output buffering benutzen, so dass Du den Header irgendwo senden kannst. Aber ich denke, dass ist hier wirklich nicht nötig.

Daniel

Hallo Daniel,

das klappt schon mal. Wieso funzt das aber lokal auf meinem Rechner und nicht mehr auf’m Web?

Wie mache ich denn einen ‚forward‘ mittem im Programm?
So etwa:
ob_start()
header(Location: …/html/projekt.html);exit;
ob_???

Ich habe folgendes auf php.net gefunden:
header(‚Location:http:‘.$_SERVER[‚HTTP_HOST‘] .dirname($_SERVER[‚PHP_SELF‘])
.’/’.‚einedatei.html‘);

Wie kann ich den relativen Pfad darin eingeben? (So wie oben)
Ich nehme an dass ‚dirname($_SERVER[‚PHP_SELF‘])‘ auf das Verzeichnis des aktuellem Skript zeigt.

Vielen Dank schon mal für deine Antwort.

Gruß
Marc

Wie mache ich denn einen ‚forward‘ mittem im Programm?
So etwa:
ob_start()
header(Location: …/html/projekt.html);exit;
ob_???

überhaupt nciht, wenn du schon irgendetwas ausgegeben hast.

der server gibt auf eine anfrage des browsers zuerst irgendwelche header aus, die z.b. so aussehen koennten:

HTTP/1.1 200 OK
Date: Fri, 12 Mar 2004 11:08:52 GMT
Server: Apache/1.3.28 (Unix)
Connection: close
Content-Type: text/html

jetzt weiss der browser was da kommt.

wenn der server jetzt so was zurueckgibt

Location: foo/bar.html

weiss der browser ok, da kommt nic mehr ich muss eine neue anfrage an die empfangene adresse machen. nach dem location darf/soll/braucht dann aber auch nix mehr kommen.

auf keinen fall sollte sowas rauskommen:

HTTP/1.1 200 OK
Date: Fri, 12 Mar 2004 11:08:52 GMT
Server: Apache/1.3.28 (Unix)
Connection: close
Content-Type: text/html


Location: foo/bar

weil dann ist location kein header mehr und php meckert… logisch.

also entweder vor der ersten ausgabe entscheiden, was gemacht werden soll, oder aber und das vermute ich mal, hilf dir eher: du machst statt dem locationheader was huebsches mit seitenabschnitten, die du includest…

also z.b. sowas:

<?php if (bedingung) { include(login); } else { include(foo); }<br />

Das war einleuchtend! Vielen Dank