PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : PHP Redirects



Latency
04.06.2004, 21:12
Ich hab folgendes Problem:

Seite A redirected am schluss automatisch auf Seite B


//Code der Seite A:
<?php
header("Location: ?site=_shoutbox&reload=1");
?>


Da, aber Seite B trozd des Reloads nicht auf dem aktuellen stand ist will ich Seite B auch relaoden, klappt aber nicht -_-



//Code der Seite B:
<?php
header("Location: ?site=_shoutbox");
?>


P.S. das erste site=... wird für den Include benötigt.

edit
Die Fehlermeldung:
Warning: Cannot modify header information - headers already sent by (output started at /srv/www/htdocs/index.php:7) in /srv/www/htdocs/inc/_shoutbox.inc on line 6

Dingsi
04.06.2004, 21:48
der header() befehl darf nur benutzt werden, wenn noch keine einziege andere ausgabe an den browser gesendet wurde, d.h. befehle wie print(),echo() etc oder nicht php-bereiche (html).

ich nehme an, dass hier
(output started at /srv/www/htdocs/index.php:7) schonmal irgendetwas gesendet wurde.

das ganze kann man am besten durch output buffering verhindern.
dafür machst du am anfang deines scripts einfach ein ob_start(). (auch vor jeder ausgabe)
dadurch wird alles, was gesendet wird, zwischengespeichert und erst ganz am ende des scripts wirklich gesendet. ist auch lustig in zusammenarbeit mit ob_get_contents() und ob_end(). aber das ist eine andere geschichte. ^^ kannst ja einfach mal bei www.php.net schaun. ist imho immer sehr hilfreich und informativ. ^^"

btw, ein tipp.
ich empfehle dir im location-header die volle addresse anzugeben, da manche browser relative angaben nicht verstehen. d.h. mach "Location: http://www.dein-host.de/index.php?shoutbox".
einfacher kannst dus dir z.B. durch die server-variablen machen, wie $_SERVER['irgendwas_mit_host']. den namen weiß ich jetzt nicht genau. mach einfach mal phpinfo(). dann siehst du die ganzen variablen.


und ich empfehle außerdem auch den reload nicht mit nem location-header zu machen sondern durch einen der das caching verhindertn. mal schaun... ah, hier.

header("Pragma: no-cache");
header("Cache-Control: no-store, no-cache, must-revalidate"); dadurch wird die seite nicht gecacht. ich denke dann wird sie immer up-to-date sein...
das ist doch dein problem... oder? ^^"

whee.
ich habs auf php.net gefunden:
der beste location-code ist so:

header("Location: http://".$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF'])."/".$relative_url);

hth. ich hab diesen post jetzt bestimmt mehr als 10mal editiert. xD

Latency
04.06.2004, 22:02
Mhm... ich hab mal versucht was du gesagt hast:

Code der Seite a wurde so verändert:


header("Location: ?site=_shoutbox");


Seite B sieht nun so aus:


<?php
header("Pragma: no-cache");
header("Cache-Control: no-store, no-cache, must-revalidate");
?>
<html>
.
.
.


Fehlermeldung:
Warning: Cannot modify header information - headers already sent by (output started at /srv/www/htdocs/index.php:7) in /srv/www/htdocs/inc/_shoutbox.inc on line 2

Warning: Cannot modify header information - headers already sent by (output started at /srv/www/htdocs/index.php:7) in /srv/www/htdocs/inc/_shoutbox.inc on line

Es hat also nicht wirklich etwas gebracht -_-

edit:
Achja Index.php Zeile 7 Bindet nur eine externe .js datei ein, mehr nicht.

Dingsi
04.06.2004, 22:07
der no-cache code war auch nicht da um den fehler zu beheben. ^^"
der war nur da, um diesen imho etwas unschönen location-header zu ersetzen.

sorry, wenn das etwas blöd rüberkam. ^^"

das problem kannst du durchs OB (ob_start(), s.o.) oder durchs überprüfen deines codes in index.php:7 lösen.

das ist ja auch schon.
die externe js datei wird an den browser gesendet, welcher dadurch auch schon feste header erhält. die können jetzt nichtmehr durch header() geändert werden.

Latency
04.06.2004, 22:13
Ich hab die Cache einstellungen auf die gesamte Seite erweitert, dass diese sich nicht mehr Cachen lässt, die Fehler sind weg, das automatische aktualisieren klappt trozdem nicht

Latency
10.06.2004, 02:18
Joho! Ich hab mal wieder ne doofe Frage ^^°
Wie kann ich die aktuelle URL auslesen? Ich habe herausgefunde wie man sie in ihre einzelteile Zerlegen kann, aber nicht wie man sie ausliest -_-

Nun, wäre recht wichtig das mal zu erfahren, zudem bräuchte ich dann noch eine Möglichkeit, Variablen an meine URL anzuhängen, so dass die Seite auf die Verlinkt wird die Variablen ausließt. Gibt es da irgend eine Möglichkeit?

Dingsi
10.06.2004, 03:31
mach einfach mal ein php script:

<? phpinfo(); ?>
dann siehst du ganz unten alle server-variablen (http,env,etc)
ua. eben auch: $_SERVER["HTTP_HOST"]._SERVER["SCRIPT_NAME"]

2.
einfach an die url ein ?seite=inhalt anhängen (es ergibt sich http://www.host.de/index.php?seite=inhalt)

im script liest du des denn mit $_GET['seite']. ôô

aber das kannst du doch schon o-O°

Latency
10.06.2004, 03:49
@Dingsi: Aha, danke ich werde es nachher gleich mal ausprobieren :)
Und mein Können und Wissen von PHP tendiert doch ziemlich stark gegen null, deswegen frage ich ja immer so blöde Fragen ^^°

Aber ich hoffe, das sobald alle Startschwierigkeiten überwunden sind, das ganze besser läuft. Die meisten Probleme ergeben sich ja daraus, dass ich keine gute Docu habe. SelfPHP und php.net sind IMHO irgendwie nicht das ware, für anfänger wie mich :rolleyes:

Dingsi
10.06.2004, 04:01
mh.. ich weiß ja jetzt net genau was du schon alles kannst, aber www.schattenbaum.net hat mir am anfang recht gut geholfen. ^_~

Latency
10.06.2004, 04:05
Original geschrieben von Dingsi
mh.. ich weiß ja jetzt net genau was du schon alles kannst, aber www.schattenbaum.net hat mir am anfang recht gut geholfen. ^_~ Jo, den Link kenn ich auch schon, nur glaube ich, dass ich über dieses Level schon hinaus bin, oder einfach alles zu kompliziert angehe, und deswegen mit dem kleinen Tut nix weiter anfangen kann :rolleyes:

Ich suche ja auch nicht wirklich ein Tutorial, eine Functionsübersicht in der ich mich zurechtfinde würde reichen. Jedoch kenne ich keine deswegen suche ich immer lang nach Funktionen um danach doch im Forum nach hilfe zu fragen ^^°

Dingsi
10.06.2004, 04:38
also wenn du sowas suchst ist selfphp doch die beste wahl. da kann man ganz einfach das jeweilige gebiet raussuchen (ggf. sogar mit der internen suchmaschiene) und die einfach nach der funktion gucken... o_o
das ist doch eigentlich recht einfach, imho, und was besser wirst du, denke ich, nicht finden... ich benutze zuviele einschübe wie glaube ich oder denke ich, glaube ich)