Server-Variable nicht verfügbar

Alles, was PHP betrifft, kann hier besprochen werden.

Server-Variable nicht verfügbar

Postby rprobst » 25. May 2006 18:05

Ich habe auf meinem Laptop das XAMPP installiert (neue Version) und will mich nun an php zu schaffen machen; das geht auch ganz gut bis auf...
Leider kann ich keine Server-Variablen auswerten.
Der Code
echo $HTTP_REFERER;
oder
echo $REMOTE_ADR;
bringt nichts.
Ich kann aber z.B. mit
echo $PHP_VERSION;
oder
echo __FILE__
eine Ausgabe erzielen.

Schlimm wirds bei $HTTP_POST_VARS. Die sind leer, wenn ich ein Form (mit 3 Variablen) absende. Mit $HTTP_GET_VARS sind die Daten aber da.
In beiden Fällen kann ich aber mit if (isset($HTTP_POST_VARS)) bzw. if(isset($HTTP_GET_VARS)) keinen Effekt (Programmverzweigung) erzielen.

Kann es sein, dass in der Konfiguration etwas angepasst werden muss? Ich habe schon gesucht (z.B. track_vars) aber nichts gefunden.

Vielen Dank
rprobst
 
Posts: 7
Joined: 14. February 2005 09:10

Postby Wiedmann » 25. May 2006 19:08

Leider kann ich keine Server-Variablen auswerten.
echo $HTTP_REFERER;
oder
echo $REMOTE_ADR;

Beides sind keine Variablen die PHP (normal) von sich aus setzt. Ergo wirst du eine Notice wegen undefinierter Variablen bekommen. Sofern du ein geeigentes error_level beim Entwickeln hast und die Variablen nicht noch vorher wo initialisierst.

Schlimm wirds bei $HTTP_POST_VARS. Die sind leer, wenn ich ein Form (mit 3 Variablen) absende. Mit $HTTP_GET_VARS sind die Daten aber da.

Na du solltest schon wissen, ob du das Formular mit POST oder GET abgeschickt hast... BTW gehören auch Long-Arrays zur aussterbenden Sorte.

Kann es sein, dass in der Konfiguration etwas angepasst werden muss?

Evtl. mal ins PHP-Manual schauen, wie das mit den externen und vordefinierten Variablen korrekt funktioniert? ;-)
Wiedmann
AF Moderator
 
Posts: 17106
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Postby rprobst » 25. May 2006 22:08

Habe inzwischen gesehen, dass HTTP_... aus dem CGI-Modus kommen. Muss offenbar ein Schalter sein, den ich stellen kann. Werde ich dann schon finden.

Habe POST und GET getrennt ausprobiert (= gezielt beide Arten angewendet). Bei POST ist in der Varibale nichts d.h. mit count() kommt der Wert 0. Bei GET sind 4 Einträge drin. Aber in beiden Fällen bringt isset(...) den Wert true. Und das irritiert.

Da ich aus der Java-Welt komme und einiges an php-Code erbe, möchte ich schon mit den "alten" TEchniken auch etwas vertraut sein. Daher will ich die Verwendung der Long-Arrays (habe nicht gewusst, das man denen so sagt) schon auch verstehen.

Daher trotzdem die Frage nach HTTP_POST_VARS. Warum gibt isset den Wert true, wenn der Inhalt leer ist? Und warum ist der Inahlt leer, wenn ich aus dem Formular Daten anliefere?
rprobst
 
Posts: 7
Joined: 14. February 2005 09:10

Postby Wiedmann » 25. May 2006 22:36

Habe inzwischen gesehen, dass HTTP_... aus dem CGI-Modus kommen.

Jein. Die gibts auch im PHP-Modul. Nur halt nciht im CLI, da dort logischerweise kein HTTP-Request über einen Webserver stattfindet.

Habe POST und GET getrennt ausprobiert (= gezielt beide Arten angewendet). Bei POST ist in der Varibale nichts d.h. mit count() kommt der Wert 0. Bei GET sind 4 Einträge drin. Aber in beiden Fällen bringt isset(...) den Wert true. Und das irritiert.

Wegen? Da bei dir register_long_arrays aktiviert ist, legt PHP erst einmal die 2 Arrays an. Deshalb bringt isset() true. Nach dem Anlegen werden dann die orginalen Arrays, sofern diese Daten enthalten, da reinkopiert.

möchte ich schon mit den "alten" TEchniken auch etwas vertraut sein.

Wo du das nachlesen kannst, hatte ich ja schon genannt.

Daher will ich die Verwendung der Long-Arrays (habe nicht gewusst, das man denen so sagt) schon auch verstehen.

Du verwendest sowohl Long-Arrays, sowie das noch schlimmere und ältere register_globals. Da es das demnächst nicht mehr gibt, sollte dich das nicht so dringend interessieren... ansonsten s.o.

Daher trotzdem die Frage nach HTTP_POST_VARS. Warum gibt isset den Wert true, wenn der Inhalt leer ist? Und warum ist der Inahlt leer, wenn ich aus dem Formular Daten anliefere?

Du hast dein Formular mit "methode=get" definiert. Ergo hast du einen GET-Request und die Daten landen dann in $HTTP_GET_VARS und logischerweise nicht in $HTTP_POST_VARS. (sonst bräuchte man ja nciht beide Arrays wenn alle das Selbe hätten ;-)

BTW landen die Daten eigentlich in den Arrays $_GET oder $_POST die du deshalb benutzen solltest.

Deine 3 Variablen aus dem ersten Post findest du im Array $_SERVER. phpinfo() würde dir das aber auch zeigen (zusammen mit den korrekten Namen).

"__FILE__" ist eine (automagische) Konstante und kein Array und deshalb auch so verfügbar.
Wiedmann
AF Moderator
 
Posts: 17106
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Re: Server-Variable nicht verfügbar

Postby sari42 » 28. May 2006 19:55

rprobst wrote:echo $HTTP_REFERER;
oder
echo $REMOTE_ADR;

heißt jetzt (reg.globals off):
echo $_SERVER['HTTP_REFERER'];
bzw:
echo $_SERVER['REMOTE_ADR'];

x.php?p=1

wird mit z.B. mit
echo $_GET['p'];
ausgewertet.
Code: Select all
<?php
phpinfo(32);
?>

zeigt die gesetzten vars.
sari42
 
Posts: 800
Joined: 27. November 2005 18:28

Postby Wiedmann » 28. May 2006 20:13

heißt jetzt (reg.globals off):

Nur 3 Nachträge ;-)
- Diese Variablen gibt es schon seit PHP 4.1.0 und auch wenn "register_globals = on" ist
- Seit PHP 4.2.0 kann man defaultmässig nur noch damit auf die Werte zugreifen.
- Vor PHP 4.1.0 gab es schon die entspr. Long-Arrays (nicht superglobal), die auch heute "noch" gehen (lassen sich seit PHP5 aber abschalten und fallen demnächst auch unter den Tisch wie die register_globals).

--> es gab also noch nie einen Grund mit den automatisch registrierten globalen Variablen zu Arbeiten (ausser in der PHP3-Steinzeit).

(soviel zu "jetzt"... ist alles schon ganz schön lange her ;-)

BTW zeigt einem phpinfo() auch schon immer (auch) die korrekten Variablen-Namen an.
Wiedmann
AF Moderator
 
Posts: 17106
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Postby sari42 » 28. May 2006 20:27

ja,pappi
die Beiträge von rprobst hörten sich nur nach so alten scripten an, daß ich mich mal auf das Niveau eingestellt hab.
phpinfo(32) bezog sich auf die php-variablen.
sari42
 
Posts: 800
Joined: 27. November 2005 18:28


Return to PHP

Who is online

Users browsing this forum: No registered users and 2 guests