exit; oder return;
Thomas Schmieder
- php
Guten Abend,
habe heute endlich mal angefangen, meinen gesammelten PHP-Scripte zu sichten und zu sortieren. Dabei bin ich auf eine Frage gestoßen, die ich mit der Litereatur und den Forumsbeiträgen nicht klären konnte:
Was ist der Unterschied bei der Verwendung der beiden Statements innerhalb eines Scriptes auf der Hauptebene, also nicht innerhalb einer Funktion?
return;
exit;
Sind die beiden gleichwertig, oder sind Unterschiede zu beachten?
Liebe Grüße
Tom
Guten Abend,
dito. :-)
Was ist der Unterschied bei der Verwendung der beiden Statements innerhalb eines Scriptes auf der Hauptebene, also nicht innerhalb einer Funktion?
return;
exit;
Sind die beiden gleichwertig, oder sind Unterschiede zu beachten?
Kommt darauf an. Wenn das Script wirklich direkt vom Browser angefordert wurde, dann sind beide gleichwertig. Wenn das Script dagegen include()ed oder require()ed wird, dann wird bei return nur die "aktuelle Datei beendet" (naja - wie soll ich mich sonst ausdrücken?) während bei exit die komplette Ausführung beendet wird.
Ich empfehle prinzipiell return, es sei denn, es ist nach einem Location-Header o.ä. Denn so kannst Du Scripte später besser mit include()s zusammenflicken.
Grüße,
Christian
Hallo Henryk, hallo Christian,
so langsam kommt ja Ordnung in meine Sammlung. Danke Euch...
Es fehlt mir nun noch eine Auflistung der Server- und Systemvariablen und wann sie übertragen werden.
Welche Variablen stehen auf der Serverseite nach einem <img src="bild.php?bild=1223567.jpg"> zur Verfügung, wenn der Benutzer sich vorher authentifiziert hatte?
Bekomme ich im Request das Datum des im Cache des Clients befindlichen Bildes mit dieser URi mitgeteilt? Ist lokales Caching hier überhaupt möglich?
Ich wollte keinen extra Thread aufmachen. Abe über Eure Antwort würde ich mich natürlich trotzdem freuen.
Liebe Grüße aus http://www.braunschweig.de
Tom
Hallo Thomas,
Welche Variablen stehen auf der Serverseite nach einem <img src="bild.php?bild=1223567.jpg"> zur Verfügung, wenn der Benutzer sich vorher authentifiziert hatte?
Womit Authentifiziert?
Bekomme ich im Request das Datum des im Cache des Clients befindlichen Bildes mit dieser URi mitgeteilt?
Jein. Wenn Du beim ersten Absenden den richtigen Last-Modified "verschickt" hast, dann schickt der Client selbst den Last-Modified-Header u.U. mit. Wenn der Last-Modified des Clients dann Deinem Last-Modified entspricht, dann kannst Du dem Client einen 304er zurückschicken und er weiß, dass das Bild noch aktuell ist. Du kannst den Client auch zum richtigen Caching bewegen, indem Du richtige Cache-Control und Expires Header verschickst. Schau' Dir mal die HTTP-Spec an, da wird das recht genau beschrieben.
Ich wollte keinen extra Thread aufmachen.
Sehr klug. Nächstes Mal änderst Du noch den Titel und es ist perfekt. :-)
Grüße,
Christian
Hallo nochmal,
wie komme ich an die Header-Variablen heran? In welchem Array sind die versteckt?
Ich möchte in Zukunft register_globals auf off schalten.
LG
Tom
Moin,
wie komme ich an die Header-Variablen heran? In welchem Array sind die versteckt?
phpinfo() ist dein Freund. Es zeigt dir alle Paramertervariablen an und ich würde einfach mal vermuten, dass sich die von dir gesuchten Variablen hinter _Server["HTTP_irgendwas"] verstecken, wobei irgendwas dem Namen des HTTP-Headers (- durch _ ersetzen) entspricht.
--
Henryk Plötz
Grüße aus Berlin
Hallo,
liest mich noch jemand um diese Zeit?
Ich finde die dämlichen Variablen nicht, die durch <img src="..."> vom Client an den Server gesendet werden. Das Array $_SERVER ist immer leer.
Wo können die Werte drinstehen?
Ich brauche ja nur LAST_MODIFIED.
Grüße
Tom
Guten Morgen,
nachden ich den Rest der Nacht von den HTTP_SERVER_VARS geträumt habe, habe ichs jezt rausbekommen, was übertragen bzw. von PHP bereitgestellt wird:
DOCUMENT_ROOT = /usr/local/httpd/htdocs/bitworks<br>
HTTP_ACCEPT = */*<br>
HTTP_ACCEPT_ENCODING = gzip, deflate<br>
HTTP_ACCEPT_LANGUAGE = de,en-us;q=0.5<br>
HTTP_HOST = www.bitworks.de<br>
HTTP_IF_MODIFIED_SINCE = Fri, 14 Jun 2002 06:14:10 GMT<br>
HTTP_PRAGMA = no-cache<br>
HTTP_PROXY_CONNECTION = Keep-Alive<br>
HTTP_REFERER = http://www.bitworks.de/~tschmieder/get_server.html<br>
HTTP_USER_AGENT = Mozilla/4.0 (compatible; MSIE 5.5; Windows 98; DT)<br>
PATH = /sbin:/bin:/usr/sbin:/usr/bin<br>
QAbild = hallo.jpg<br>
REMOTE_ADDR = 192.168.101.25<br>
REMOTE_PORT = 4941<br>
SCRIPT_FILENAME = /home/tschmieder/public_html/server.php<br>
SERVER_ADDR = 192.168.101.1<br>
SERVER_ADMIN = [no address given]<br>
SERVER_NAME = www.bitworks.de<br>
SERVER_PORT = 80<br>
SERVER_SIGNATURE = <ADDRESS>Apache/1.3.19 Server at www.bitworks.de Port 80</ADDRESS>
<br>
SERVER_SOFTWARE = Apache/1.3.19 (Unix) (SuSE/Linux) PHP/4.0.4pl1 mod_ssl/2.8.3 OpenSSL/0.9.6a mod_throttle/3.0 mod_layout/1
.0 mod_fastcgi/2.2.2 mod_dtcl<br>
UNIQUE_ID = PbI78tRTP6IAABzqlWo<br>
GATEWAY_INTERFACE = CGI/1.1<br>
SERVER_PROTOCOL = HTTP/1.1<br>
REQUEST_METHOD = GET<br>
QUERY_STRING = bild=hallo.jpg<br>
REQUEST_URI = http://www.bitworks.de/~tschmieder/server.php?bild=hallo.jpg<br>
SCRIPT_NAME = /~tschmieder/server.php<br>
PATH_TRANSLATED = /home/tschmieder/public_html/server.php<br>
PHP_SELF = /~tschmieder/server.php<br>
argv = Array<br>
argc = 1<br>
Die Variable HTTP_IF_MODIFIED_SINCE wird nicht jedesmal übertragen. Das liegt sicher an der Cache-Strategie (bei mir zur Zeit Auto)?
Wie kann ich diese Variable möglichst sicher (und bequem?) in einer vergleichbare Zeitgröße umwandeln, um sie mit der Zeit der Datei auf dem Server vergleichen zu können?
Das wär's dann für heute an Aufgaben. Mehr schaffe ich bestimmt nicht mehr *gg*
Liebe Grüße
Tom
Guten Morgen,
oh, was für ein fruchtbarer Tag...
Wie kann ich diese Variable $HTTP_IF_MODIFIED_SINCE möglichst sicher (und bequem?) in einer vergleichbare Zeitgröße umwandeln, um sie mit der Zeit der Datei auf dem Server vergleichen zu können?
Wer suchet der findet. Habe bestimmt dreimal dran vorbeigelesen:
<!-- zeitstempel.php -->
<pre>
<?
$zeitstr1 = "Fri, 14 Jun 2002 06:14:10 GMT";
$zeitstr2 = "Sat, 15 Jun 2002 06:14:10 GMT";
$zeitstempel1 = strtotime($zeitstr1);
$zeitstempel2 = strtotime($zeitstr2);
$zeitdiff = $zeitstempel2 - $zeitstempel1;
echo $zeitstr1." --> " .$zeitstempel1. "<br>";
echo $zeitstr2." --> " .$zeitstempel2. "<br>";
echo "Zeitdifferenz = ".$zeitdiff. "<br>";
?>
</pre>
Na, dann kann ich Euch ja jetzt noch mit wichtigeren Fragen nerven :-))
Liebe Grüße
Tom
Moin,
habe heute endlich mal angefangen, meinen gesammelten PHP-Scripte zu sichten und zu sortieren. Dabei bin ich auf eine Frage gestoßen, die ich mit der Litereatur und den Forumsbeiträgen nicht klären konnte:
Dann schlage ich vor, http://www.php.net in deine Literatursammlung aufzunehmen.
Sind die beiden gleichwertig, oder sind Unterschiede zu beachten?
exit (== die) beendet die PHP-Ausführung komplett und gibt ggbf. das was du ihm als Parameter gibst aus. return beendet die Ausführung des aktuellen Skriptes was bedeutet, dass das das aufrufende Skript weiterläuft, wenn das aktuelle Skript mit include() bzw. require() eingebunden wurde. Ausserdem wird im ersteren Fall das was du return als Parameter gibst an das aufrufende Skript als Rückgabewert von include() zurückgegeben.
--
Henryk Plötz
Grüße aus Berlin