Alternative für header("Location: foo");
Fritz
- php
0 Adromir1 Christian Seiler0 Fritz
2 Julian von Mendel0 Christian Seiler0 Fritz0 Ashura
Hallo,
gibt es in PHP eine andere Möglichkeit, den Browser anzuweisen, eine bestimmte Datei anzuzeigen, außer
header("Location: foo");
Ich fürchte nein, möchte aber nichts unversucht lassen. Vielleicht leide ich auch mal wieder unter einem Anflug von "Tomaten auf den Augen"
Grund für meine Frage:
Der "berühmte" Fehler:
"Cannot modify header information - headers already sent"
den ich anderweitig nicht vermeiden kann. Da mein Script u.U. recht lange läuft, muß ich dem user eine Information darüber auf den Bildschirm schreiben.
Gruß Fritz
Du musst den Header natürlich auch an aller erste stelle setzen.. Bevor du irgendetwas an den Browser sendest. Es darf noch nicht mal ein Leerzeichen vor dem php-Block stehen..
Alternativ kannst du auch einen META-Refresh nehmen..
Hallo Fritz,
gibt es in PHP eine andere Möglichkeit, den Browser anzuweisen, eine bestimmte Datei anzuzeigen, außer
header("Location: foo");
Serverseitig nicht.
Grund für meine Frage:
Der "berühmte" Fehler:
"Cannot modify header information - headers already sent"
den ich anderweitig nicht vermeiden kann. Da mein Script u.U. recht lange läuft, muß ich dem user eine Information darüber auf den Bildschirm schreiben.
Du kannst ganz an den Anfang Deiner Seite einen http://de.selfhtml.org/html/kopfdaten/meta.htm#weiterleitung@title=Meta-Refresh setzen. Wenn Du dort 0 für die Verzögerung angibst, dann erzielst Du das von Dir gewünschte verhalten - die Verzögerung gilt nämlich ab dem Zeitpunkt, ab dem die Seite fertig geladen ist.
d.h. ganz am Anfang sendest Du an den Browser
<!DOCTYPE ...>
<html>
<head>
<title>Daten werden verarbeitet</title>
<meta http-equiv="Refresh" content="0; URL=http://weiterleitung/">
</head>
<body>
<p>Die Daten werden Verarbeitet.</p>
</body>
</html>
Dann rufst Du in PHP die Funktion flush();
auf. Damit wird das bereits an den Browser geschickt. Sobald das PHP-Script dann *fertig* ist (und die Verbindung zum Browser geschlossen), wird die Weiterleitung (die der Browser jedoch schon längst mitbekommen hat) ausgeführt.
Viele Grüße,
Christian
Hallo Christian,
danke schon mal für Deine Bemühungen.
Du kannst ganz an den Anfang Deiner Seite einen http://de.selfhtml.org/html/kopfdaten/meta.htm#weiterleitung@title=Meta-Refresh setzen. ... Sobald das PHP-Script dann *fertig* ist (und die Verbindung zum Browser geschlossen), wird die Weiterleitung (die der Browser jedoch schon längst mitbekommen hat) ausgeführt.
genau das ist das Problem: das Script selbst erkennt erst, wohin umgeleitet werden soll. Und damit kann ich es natürlich nicht _vorher_ schon in ein <meta> schreiben.
Gruß Fritz
Hallo Fritz,
genau das ist das Problem: das Script selbst erkennt erst, wohin umgeleitet werden soll. Und damit kann ich es natürlich nicht _vorher_ schon in ein <meta> schreiben.
Dann bleibt nur der Weg über eine JavaScript-Weiterleitung... (<script type="text/javascript">location.replace ('neueseite.html');</script>
) oder Du lässt es mit der Anzeige, dass das Script noch arbeitet und schreibst auf der vorherigen Seite dazu, dass man das nicht abbrechen soll.
Viele Grüße,
Christian
Hallo Christian,
Dann bleibt nur der Weg über eine JavaScript-Weiterleitung... oder Du lässt es mit der Anzeige, dass das Script noch arbeitet...
Ich hab's befürchtet, wollte aber sichergehen.
Danke schön.
Gruß Fritz
Hallo,
du kannst Output-Buffering verwenden. D. h. du schreibst GANZ an den Anfang "ob_start();", ganz an das Ende "ob_end_flush();" und zwischendrin kannst du Ausgaben machen wie du lustig bist. Wenn aber irgendwo zwischen den Ausgaben ein header() kommt, wird dieses trotzdem als erstes an den Browser geschickt, ohne Fehlermeldung ;)
Schöne Grüße
Julian
Hallo Julian,
du kannst Output-Buffering verwenden. D. h. du schreibst GANZ an den Anfang "ob_start();", ganz an das Ende "ob_end_flush();" und zwischendrin kannst du Ausgaben machen wie du lustig bist. Wenn aber irgendwo zwischen den Ausgaben ein header() kommt, wird dieses trotzdem als erstes an den Browser geschickt, ohne Fehlermeldung ;)
Dann wird aber vorher auch keine Ausgabe an den Browser gesendet und genau das ist es doch, was Fritz will.
Viele Grüße,
Christian
Hallo Julian,
du kannst Output-Buffering verwenden. D. h. du schreibst GANZ an den Anfang "ob_start();"
Ja, das GANZ war's!
Ich hab das PHP Script in eine andere Seite included. und ob_start() muß natürlich an der Anfang dieser *anderen* Datei, vor die output erzeugt.
Ja ja, die berühmten Tomaten auf den Augen ;-)
Gruß Fritz
Hallo Julian.
du kannst Output-Buffering verwenden. D. h. du schreibst GANZ an den Anfang "ob_start();", ganz an das Ende "ob_end_flush();"
Auch ich hatte lange Zeit dieses Problem, was hierdurch nun gelöst wurde.
Vielen Dank!
Gruß, Ashura