php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2005

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 10.05.2005, 15:09  
Erfahrener Benutzer
 
Registriert seit: 02.03.2005
Beiträge: 305
DerDesian
Standard Redirect und der aktuelle Prozess

Hi,

wenn ich per header() eine URL übergebe, wird diese ja quasi in den Browser geschrieben und diese Seite witd ausgeführt.

Was passiert mit der seite, wo cih den Header aufgerufen hab?
wird der Prozess sofort beendet oder läuft er weiter?

Ich mein, im PHP-Handbuch steht:

exit; // um sicherzugehen das nachgestllter Code nicht ausgeführt wird

Wie kann ich sicher gehen, dass er ausgeführt wird?

Vieleicht will ich 20 Prozesse anstoßen, die sich gegenseitig bedingen und dem User währenddessen mitteilen, dass das Vorgang einige Zeit in anspruch nehmen kann.
Oder einen Prozess anstoßen, der im hintergrundDinge erledigen soll, während der Browser nicht blockiert ist..

Gruß
Der Desian
__________________
Wenn dich was ankotzt, machs besser.
DerDesian ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 10.05.2005, 15:13  
axo
Erfahrener Benutzer
 
Registriert seit: 24.12.2004
Beiträge: 1.814
axo ist zur Zeit noch ein unbeschriebenes Blatt
Standard Re: Redirect und der aktuelle Prozess

hier mal eine einführung zum HTTP-protokoll:

http://de.wikipedia.org/wiki/HTTP

damit kannst du erstmal korrigieren, welche unwissenheiten und lügen du in deinem posting losgelassen hast, und falls du dann noch fragen hast, fragen

achso, du hast ja noch eine frage gestellt.
wie du beim HTTP-protokoll sehen kannst, besteht ein response von server zu client aus headern und dem body.

mit der funktion header() hängst du einfach eine neue zeile an die header-message dran, und das so lange, bis du das erste byte des bodys ausgibst.

und in verbindung mit header - location macht es sinn, das skript mit exit oder die() zu beenden, ja, denn das skript wird weiterhin ausgeführt, so lange, bis es zu body-output kommt, und das header-location wird erst dann ausgeführt.


cya
axo
axo ist offline  
Alt 10.05.2005, 15:13  
Gast
 
Beiträge: n/a
Standard

soweit ich weiss ist das exit nur dann von bedeutung wenn der header nicht geht und keine fehlermeldung kommt...
so hab ich es jedenfalls von meinem buch her verstanden....
 
Alt 10.05.2005, 15:32  
Erfahrener Benutzer
 
Registriert seit: 02.03.2005
Beiträge: 305
DerDesian
Standard

Vieleicht ist es etwas frei formuliert.
Lüge kann es schlecht sein, denn ich verwende des öfteren und es tut auch soweit.
Wenn ich die Location verändere, (ok, ChangeLocation ist zugegebenermaßen nur eine Funktion einer headerzeile) dann geht er auf die entsprechende URL.

Probiers aus:
test.php
<?PHP header('Location: http://www.google.de'); ?>

Ne hilfreiche Antwort, von jemandem, der die Frage versteht und eine sinnvolle Antwort weiss wäre hilfreicher.

Sorry, aber wenn ich als Lügner hingestellt werde bin ich schon etwas angegessen...

http://www.php.net/manual/de/
http://de.selfhtml.org/
http://www.w3schools.com/
http://www.google.de/
Sind meine ersten Anlaufstellen, vor dem Forum.
War auch nur ne reine Interessensfrage.
__________________
Wenn dich was ankotzt, machs besser.
DerDesian ist offline  
Alt 10.05.2005, 15:40  
Erfahrener Benutzer
 
Registriert seit: 29.10.2004
Beiträge: 1.781
derHund
Standard

Zitat:
Vieleicht ist es etwas frei formuliert. Lüge kann es schlecht sein
sehr frei ... und wahr ist es auch nicht. boolsche algebra sagt uns in diesem falle was?
Zitat:
Wie kann ich sicher gehen, dass er ausgeführt wird?
kein exit() oder die() verwenden?
Zitat:
wird der Prozess sofort beendet oder läuft er weiter?
der process ... meinst du das aktuell laufende script? es wird, sofern fehelrfrei, bis zum ende ausgeführt.
__________________
derHund ist offline  
Alt 10.05.2005, 15:51  
Gast
 
Beiträge: n/a
Standard

Location header ohne exit:
Zitat:
Zitat von DerDesian
Lüge kann es schlecht sein, denn ich verwende des öfteren und es tut auch soweit.
Daß das mit dem einen oder anderen Browser funktionieren könnte, bedeutet noch lange nicht, daß es richtig ist.

Natürlich kannste Deine "Sharewareschleife" auch ohne exit bis zum Ende durchrattern lassen, wenn Du keinerlei Content dabei sendest.

Wenn Du bei einem Location Header Content sendest, bringst Du den Client in eine Zwangslage: soll er nun die fremde Resource requesten oder stattdessen den Content der Resource anzeigen, die er eigentlich haben wollte? Wie darauf ein Browser, ein Robot oder sonstwas reagiert, ist dann nur noch von deren Fehlerbehandlung abhängig.
 
Alt 10.05.2005, 15:55  
axo
Erfahrener Benutzer
 
Registriert seit: 24.12.2004
Beiträge: 1.814
axo ist zur Zeit noch ein unbeschriebenes Blatt
Standard

@derdesian - was du sagst, stimmt so nicht ganz. ich hab dir nicht umsonst den link zur erklärung des HTTP-protokolls geschickt. du musst erstmal verstehen, was da passiert.

PHP-Code:
<?php
header 
('Location: http://www.google.de');
$var 5;
$fp fopen(dirname(__FILE__).'/test.txt','w+');
fputs($fp,$var);
fclose($fp);
?>
... sofern kein notice o.ä. durch fehlende benutzerrechte für test.txt erzeugt wird, sollte die datei erst geschrieben werden, bevor die umleitung kommt.

wenn du allerdings so arbeitest:
PHP-Code:
<?php
header 
('Location: http://www.google.de');
echo 
'dong';
$var 5;
$fp fopen(dirname(__FILE__).'/test.txt','w+');
fputs($fp,$var);
fclose($fp);
?>
... wird nichts in die textdatei geschrieben, denn es erfolgt mit 'dong' body-output, und genau davor werden die header versendet, und die umleitung passiert.

schlimmer wird's bei folgendem:

PHP-Code:
<?php
header
('Location: http://www.google.de');
header('Location: http://www.php.net/header/');
?>
ich wette mit dir, dass du google mit diesem skript nicht sehen wirst.

aus diesem grund sollte man, wenn man wirklich eine sofortige umleitung mit sofortigem beenden des skripts erzwingen will, direkt nach dem header() - aufruf ein exit; oder die(); hinzufügen.

außerdem kann es gerade bei dynamischer generierung solcher header immer wieder vorkommen, dass der header-befehl syntaktisch falsch abgesetzt wird und aufgrunddessen nicht ausgeführt wird - ohne exit würde dann das skript gemütlich weiterlaufen.
axo ist offline  
Alt 10.05.2005, 16:01  
Erfahrener Benutzer
 
Registriert seit: 02.03.2005
Beiträge: 305
DerDesian
Standard

gut...
Das war die Antwort, die ich gesucht hatte.
Danke!
__________________
Wenn dich was ankotzt, machs besser.
DerDesian ist offline  
Alt 10.05.2005, 16:18  
Erfahrener Benutzer
 
Registriert seit: 08.11.2004
Beiträge: 2.079
Der_Gerhard ist zur Zeit noch ein unbeschriebenes Blatt
Der_Gerhard eine Nachricht über ICQ schicken
Standard

Zitat:
Zitat von axo
wenn du allerdings so arbeitest:
PHP-Code:
<?php
header 
('Location: http://www.google.de');
echo 
'dong';
$var 5;
$fp fopen(dirname(__FILE__).'/test.txt','w+');
fputs($fp,$var);
fclose($fp);
?>
... wird nichts in die textdatei geschrieben, denn es erfolgt mit 'dong' body-output, und genau davor werden die header versendet, und die umleitung passiert.
Erklär mir mal, warum das so sein sollte?

Wertet PHP die Header selbst aus oder werden sie nur ungeprüft an den Client weitergeleitet?

Ich würde eher erwarten, dass das Script bis zum Ende abgearbeitet wird. Ob der Browser das 'dong' anzeigt, ist eine andere Sache.

In der Doku (http://www.php.net/header) hab ich grad nur gefunden, dass zusätzlich ein Code 302 geschickt wird, wenn man nicht selbst bereits einen Code 3xx geschickt hat. Vom Abbrechen des Scriptes stand da nix.

Dass dort extra exit() verwendet wird, deutet doch darauf hin, dass der Code sehr wohl ausgeführt wird. Mit oder ohne echo ist doch egal.

Ich könnte mir nur als Fehler vorstellen, dass der Client die Verbindung sofort nach dem Header schließt und echo damit ein Problem kriegt. In allen anderen Fällen müsste in die Datei geschrieben werden.


Sollte das hier alles Bullshit sein, bitte ich um Aufklärung.
Der_Gerhard ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Erledigt] Überprüfung Cookies aktivierung ohne redirect ayti PHP Tipps 2008 7 18.04.2008 14:17
File-Locking unter Windows bzw. LINUX dr.e. PHP-Fortgeschrittene 9 17.09.2007 23:33
google - redirect kid01 Off-Topic Diskussionen 9 29.06.2007 23:27
Aktuelle Url herausfinden noBody PHP Tipps 2007 8 22.03.2007 18:24
aktuelle tabellen id ermitteln imported_dirk PHP Tipps 2006 3 10.10.2006 01:50
benötige aktuelle mysql api für php4.4.2 (windows) DonTermi Server, Hosting und Workstations 1 12.07.2006 14:55
Aktuelle Zeit PHP Tipps 2005 9 21.04.2005 21:35
umschalten des http / https protokolls mit php ohne redirect PHP Tipps 2005 2 12.01.2005 15:29
htaccess Redirect Magic Server, Hosting und Workstations 2 03.01.2005 08:37
Aktuelle Zeit minus 15 minuten ? PHP-Fortgeschrittene 6 23.11.2004 20:12
user liste aktuelle halten PHP-Fortgeschrittene 4 30.10.2004 14:15
Funktionen für aktuelle Seitenadresse und Ausmaße eines Bild PHP Tipps 2004 1 23.10.2004 16:17
redirect auf einen ganzen ordner Server, Hosting und Workstations 1 15.10.2004 20:04
Dropdownfeld das Aktuelle Oben themonk PHP Tipps 2004 11 15.10.2004 13:56
htaccess und redirect mit IF verzweigung Novan Server, Hosting und Workstations 1 11.09.2004 18:00

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php header location ohne protokoll

Alle Zeitangaben in WEZ +2. Es ist jetzt 13:30 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.