Seite 1 von 1

Variablen $PHP_SELF und $QUERY_STRING

Verfasst: Mo 4. Aug 2008, 15:11
von xmurrix
Hallo,

anscheinend werden die Variablen $PHP_SELF und $QUERY_STRING mittlerweile nicht gesetzt, sind dennoch an ein paar Stellen im Gebrauch.

Mir ist aufgefallen dass in der main.loginform.php die URL im action-Attribut nicht richtig ausgegeben wird

Code: Alles auswählen

<form name="login" method="post" action="<?php echo $this->url() ?>">
$this ist dabei eine Instanz von Contenido_Challenge_Crypt_Auth, $this->url() ruft dient als wrapper für $GLOBALS["sess"]->self_url() und darin verwendete Variablen $PHP_SELF, $QUERY_STRING sind nicht gesetzt, beide haben NULL:

Code: Alles auswählen

  function self_url() {
    global $PHP_SELF, $QUERY_STRING;

    return $this->url($PHP_SELF.
           ((isset($QUERY_STRING) && ("" != $QUERY_STRING)) ? "?".$QUERY_STRING : ""));
  }
$sess->self_url() liefert immer die URL ohne Pfad.

Sollte das vielleicht auf $_SERVER[*] umgestellt werden oder?

Habe Contenido 4.8.7 mit PHP 5.2.2 und register_globals=Off

Grüße
xmurrix

Verfasst: Mo 4. Aug 2008, 15:28
von Dodger77
Ich verschieb's mal.

Verfasst: Mo 4. Aug 2008, 21:22
von xmurrix
Beheben lässt sich das auf die Schnelle in der /contenido/includes/globals_off.inc.php mit dem Hinzufügen der folgenden 2 Zeilen an das Ende des Scriptes:

Code: Alles auswählen

// We need still following 2 variables, see usage in phplib dir...
$PHP_SELF     = $_SERVER['PHP_SELF'];
$QUERY_STRING = $_SERVER['QUERY_STRING'];
Früher wurde die Superglobale $_SERVER auch in den globalen Scope extrahiert, was ab der 4.8.7 nicht mehr der Fall ist.

Grüße
xmurrix

Verfasst: Di 5. Aug 2008, 11:08
von emergence
warum das $_SERVER entfernt wurde ist mir leider auch nicht klar...

:motz:

Verfasst: Mo 11. Aug 2008, 17:11
von timo.trautmann_4fb
Lösungsvorschlag von xmurrix checkin. Die Globals off wurde damals aus Sicherheitsgründen zum Escapen eingefügt. Da die Variablen ENV und SERVER jedoch read only sind wurden diese entfernt.

Verfasst: Di 12. Aug 2008, 10:54
von emergence
anmerkung:

um das jetzt mal richtig zu stellen...

$_ENV und $_SERVER wurden nie verändert...

einerseits wenn eine php version kleiner als 4.1.0 zum einsatz kam wurden die $_??? zur verfügung gestellt...
gut, das wird wirklich nicht mehr benötigt...

$_ENV und $_SERVER wurden als $HTTP_ENV_VARS und $HTTP_SERVER_VARS zur verfügung gestellt wenn register_long_arrays auf off ist...
das wäre vernünftig wenn man es drinnen läßt...

und hier

Code: Alles auswählen

$types_to_register = array ('GET', 'POST', 'COOKIE', 'SESSION');
wenn SERVER enthalten wäre
werden so nette sachen wie $PHP_SELF und $QUERY_STRING automatisch erzeugt....

Verfasst: Di 12. Aug 2008, 11:23
von timo.trautmann_4fb
Werde ich nachher noch übernehmen.