Andavos: Was macht dieser befehl?

Hallo,
Weiß jemand was dieser Script macht?

if(version_compare($phpversion, "4.1.0")==-1)
{
$_POST=&$HTTP_POST_VARS;
}

$test = $_POST["test"];

Das hier versteh ich:
if(version_compare($phpversion, "4.1.0")==-1)
Wenn $phpversion (vorher ermittelt) kleiner als 4.1.0 ist, erhält man -1 als ergebnis.

Dann kommt das hier:
$_POST=&$HTTP_POST_VARS;

Bedeutes es, das er aus anstatt $_POST -> $HTTP_POST_VARS benutzt, obwohl unterhalb des Scriptes $_POST["..."] steht?

MFG
Andavos

--
http://www.rpgcommunity.de/clanwissen/index.php Webdesign, PHP, Clan-Aufbau und mehr
  1. hi,

    Dann kommt das hier:
    $_POST=&$HTTP_POST_VARS;

    Bedeutes es, das er aus anstatt $_POST -> $HTTP_POST_VARS benutzt, obwohl unterhalb des Scriptes $_POST["..."] steht?

    das superglobale array $_POST steht erst ab 4.0.1 zur verfügung.

    vorher konnte man sich die per POST übergebenen werte stattdessen aus $HTTP_POST_VARS holen.

    das script macht jetzt an dieser stelle folgendes:

    wenn die version < 4.0.1 ist, also $_POST nicht zur verfügung steht, wird eine variable namens $_POST selbst erzeugt, und zwar als referenz auf $HTTP_POST_VARS (& vor variablenname = referenz).

    deshalb kann jetzt weiter unten im script $_POST verwendet werden, ohne das $_POST von php aus zur verfügung steht - die entsprechenden zugriffe werden per referenz also auf $HTTP_POST_VARS "umgeleitet".

    $_POST['name'] verweist also als referenz auf $HTTP_POST_VARS['name'].

    man erspart sich durch diesen kleinen kniff, nachher im script noch ständig unterscheiden zu müssen, ob man den wert jetzt bei einer version >= 4.0.1 aus $_POST['name'] holen muss, oder aus $HTTP_POST_VARS['name'] bei kleinerer version.

    gruss,
    wahsaga

    1. Hallo,
      hab den Script mal etwas umgebaut, so das er geht:
      <?php
      $phpversion = phpversion();
      if($phpversion <= "4.0.9")
      {
       $_GET=&$HTTP_GET_VARS;
       $_POST=&$HTTP_POST_VARS;
      }
      ?>

      Zum testen den Script benutzen:
      <?php
      $phpversion = phpversion();
      if($phpversion <= "4.0.9")
      {
       $_GET=&$HTTP_GET_VARS;
       $_POST=&$HTTP_POST_VARS;
      }

      $was = $_GET["was"];

      echo "Was hat: $was";

      ?>

      Dann den Script mit ?was=123 oder so aufrufen.

      Ihr werdet sehen, das es geht ;)
      MFG
      Andavos

      --
      http://www.rpgcommunity.de/clanwissen/index.php Webdesign, PHP, Clan-Aufbau und mehr
  2. Moin!

    Dann kommt das hier:
    $_POST=&$HTTP_POST_VARS;

    Bedeutes es, das er aus anstatt $_POST -> $HTTP_POST_VARS benutzt, obwohl unterhalb des Scriptes $_POST["..."] steht?

    Nein.

    Es wird versucht, einheitlich auf $_POST zuzugreifen. Wenn die PHP-Version kleiner als 4.1.0 ist, existiert dieses superglobale Array aber nicht, und deshalb wird eine Referenz auf $HTTP_POST_VARS erzeugt. Das ist im Prinzip eine Wertzuweisung (man hätte auch $_POST = $HTTP_POST_VARS schreiben können). Der Unterschied ist, dass eine Referenz für den einen Variablenwert einen zweiten Variablennamen definiert. PHP spart sich damit das Kopieren des Variableninhalts (geht schneller), und Änderungen über den einen Variablennamen gelten auch für jeden anderen Variablennamen.

    Der Unterschied ist: PHP kleiner 4.1 kennt keine superglobalen Variablen, und dieser Trick führt auch nicht dazu, dass sie existieren. Superglobale Variablen kann man überall (auch innerhalb von Funktionen) immer direkt ansprechen. $HTTP_POST_VARS mußte man, wenn man sie in Funktionen verwenden wollte, mit "global" erst zugriffsfähig machen.

    Dieser Code ist also nicht die Universallösung für alle Kompatibilitätsprobleme zwischen PHP 4.1 und davor. PHP 4.1 bietet ja HTTP_POST_VARS auch noch weiterhin an, und vermutlich erst mit PHP 5 wird sie abgeschafft werden. Da PHP 5 aber sowieso einige grundsätzliche Änderungen mitbringen wird, so dass Skripte nicht wirklich zwingend ohne Überarbeitung laufen werden (das ist jedenfalls meine persönliche Erwartung), und auch nicht zu erwarten ist, dass plötzlich alle Hoster nur noch PHP 5 anbieten werden, ist also ohnehin irgendwann ein harter Wechsel notwendig.

    - Sven Rautenberg

    --
    Die SelfHTML-Developer sagen Dankeschön für aktuell 20885,68 Euro Spendengelder!
    1. Hallo Sven,

      PHP 4.1 bietet ja HTTP_POST_VARS auch noch weiterhin an, und vermutlich erst mit PHP 5 wird sie abgeschafft werden.

      Nicht abgeschafft, aber mit der Konfigurationsanweisung register_long_array deaktivierbar. Standardmäßig sind sie jedoch immer noch verfügbar: http://de2.php.net/manual/en/configuration.directives.php#ini.register-long-arrays

      Schöne Grüße,

      Johannes

      --
      ss:| zu:} ls:[ fo:} de:] va:} ch:) sh:( n4:| rl:( br:< js:| ie:{ fl:( mo:}
      http://www.zeller-johannes.de/
  3. Hello,

    Das hier versteh ich:
    if(version_compare($phpversion, "4.1.0")==-1)
    Wenn $phpversion (vorher ermittelt) kleiner als 4.1.0 ist, erhält man -1 als ergebnis.

    Dann kommt das hier:
    $_POST=&$HTTP_POST_VARS;

    Bedeutes es, das er aus anstatt $_POST -> $HTTP_POST_VARS benutzt, obwohl unterhalb des Scriptes $_POST["..."] steht?

    siehe:
    [pref:t=68043&m=389984]

    Liebe Grüße aus http://www.braunschweig.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen