Christian: Umgebungsvariablen ansprechen

Hi,

was ist die beste Möglichkeit eine Umgebungsvariable anzusprechen. Damit meine ich in erster Linie solche Variablen, die per GET der URL mit gegeben werden (z.B. index.php?var=wert) oder die POST-Variablen.

PHP bringt ja die Möglichkeit mit solche Variablen direkt anzusprechen. Im obigen Beispiel stünde also $var zur Verfügung.
Ich habe aber schon gehört das diese Art Umgebungsvariablen anzusprechen nicht die feinste, bzw. sicherste ist. IMHO jedoch die einfachste. Oder ist es einfach nur schlechter Programmierstil, weil man normale Variablen lieber von Umgebungsvariablen "optisch" trennen will!?

Dann kenne ich noch folgende Möglichkeiten:

1. $_POST["var"] und $_GET["var"].
2. $HTTP_POST_VARS["var"], $HTTP_GET_VARS["var"]
3. getenv("var");

Welche der vier Möglichkeiten ist am geeignesten? Worin liegen die Unterschiede? Was empfehlt ihr mir??

gruß
Christian

  1. Hallo

    PHP bringt ja die Möglichkeit mit solche Variablen direkt anzusprechen. Im obigen Beispiel stünde also $var zur Verfügung.

    Falsch. Dies funktioniert (ab PHP 4.1) nur, wenn register_Globalsauf on steht. Per Default ist es aber auf off, und das ist auch gut so (lies dazu im Archiv).

    Laut http://de.php.net/variables.predefined solltest du auf vordefinierte Variabeln mit den Superglobals zugreifen, sprich:
    $_GET, $_POST, $_ENV, $_SERVER, $_COOKIE, $_REQUEST $_FILES und $_SESSION vrwenden.

    Auf der Seite stehen auch noch ein paar Anmerkungen zu den Unterschiede zwischen zB HTTP_POST_VARS und $_POST.

    Antwort 1. wäre also di richtige :)

    Grüße
      David

    --
    >>Nobody will ever need more than 640k RAM!<<
    1981 Bill Gates
    1. Hi,

      Falsch. Dies funktioniert (ab PHP 4.1) nur, wenn register_Globalsauf on steht. Per Default ist es aber auf off, und das ist auch gut so (lies dazu im Archiv).

      Kann nicht sein, da ich diese Möglichkeit schon unter einer PHP 3 Umgebung genutzt habe! Und ich habe schon 3 verschiedene Provider durch gemacht und auf allen hat es geklappt! Ich nehme also an, das man davon ausgehen kann, das die meisten Provider das auf "on" stellen.

      Laut http://de.php.net/variables.predefined solltest du auf vordefinierte Variabeln mit den Superglobals zugreifen, sprich:
      $_GET, $_POST, $_ENV, $_SERVER, $_COOKIE, $_REQUEST $_FILES und $_SESSION vrwenden.

      Danke für den Link.

      Christian

      1. hi,

        Falsch. Dies funktioniert (ab PHP 4.1) nur, wenn register_Globalsauf on steht. Per Default ist es aber auf off, und das ist auch gut so (lies dazu im Archiv).

        Kann nicht sein, da ich diese Möglichkeit schon unter einer PHP 3 Umgebung genutzt habe!

        _welche_ möglichkeit?
        unter php3 gab es afaik register_globals noch gar nicht, also konntest du dort mit $varname zugreifen, logisch.

        Ich nehme also an, das man davon ausgehen kann, das die meisten Provider das auf "on" stellen.

        würde ich nicht sagen.
        sicherer ist off auf jeden fall.
        vllt. stellen es nur die provider auf on, deren kunden nicht in der lage sind, mit den superglobalen arrays klarzukommen bzw. zu faul sind zum umstellen ihrer scripte...?

        gruss,
        wahsaga

        1. Hi,

          _welche_ möglichkeit?

          die möglichkeit unter PHP 3 GetVariablen direkt als solche im Skript anzusprechen:

          index.php?var1=wert
          -->
          $var1 hat den Wert "wert"

          würde ich nicht sagen.
          sicherer ist off auf jeden fall.
          vllt. stellen es nur die provider auf on, deren kunden nicht in der lage sind, mit den superglobalen arrays klarzukommen bzw. zu faul sind zum umstellen ihrer scripte...?

          Ich kannte diese Möglichkeit mit $_GET bis vor kurzem gar nicht. Da ich schon Skripte in PHP3 geschrieben habe und da immer mit o.g. Möglichkeit gearbeitet habe, arbeite ich auch heute noch damit.
          Und $_GET gabs in PHP3 nun mal noch nicht (erst seit PHP 4.1)

          Christian

          1. Hallo

            index.php?var1=wert
            -->
            $var1 hat den Wert "wert"

            Und genau deswegen hat man RG eingeführt.

            Ich kannte diese Möglichkeit mit $_GET bis vor kurzem gar nicht. Da ich schon Skripte in PHP3 geschrieben habe und da immer mit o.g. Möglichkeit gearbeitet habe, arbeite ich auch heute noch damit.

            Nun, jetzt kenst du die Möglichkeit, weißt dass sie sicherer und besser ist, also verwende sie auch :)

            Und irgendwann werden (hoffentlich) alle Provider au RG=Off umstellen. Also lieber gleich richtig programmieren als irgendwann doppelte Arbeit zu verrichten. Schließlich sollten die default-Eintellungen bald hoffennltich auc überall standardmäßig vorzufinden sein.

            Grüße
              David

            --
            >>Nobody will ever need more than 640k RAM!<<
            1981 Bill Gates