Klaus: Help: Frage zu PHP "register_globals"

Hallo zusammen,

ab PHP4.2 hat sich der Default Wert von "register_globals" von "on" auf "off" geändert.

Das holt mich mit einem meiner Scripte gerade ein, weil ein paar Leute, die das verwenden, auf PHP5.x wechseln.

Muss ich für normale Variablen wirklich Abfragen für $HTTP_GET_VARS (PHP < 4.1) machen, ab PHP4.1 $_GET etc.
Das ist ja Wahnsinn. Bin gerade völlig am Durchdrehen.

Sicher war der eine oder andere schon mal mit einer ähnlichen Fragestellung konfrontiert.

Welche Fallunterscheidungen machen denn Sinn, damit das Script seine Variablen mit den PHP Versionen 4.1 bis 5.x sauber verarbeitet? Wie geht Ihr mit dieser Umstellung um?

Vielen Dank

Klaus

  1. Hi,

    Muss ich für normale Variablen wirklich Abfragen für $HTTP_GET_VARS (PHP < 4.1) machen, ab PHP4.1 $_GET etc.

    selbstverständlich. Du musstest das eigentlich schon immer, nur war standardmäßig das gigantische Sicherheitsloch integriert, dass beliebige Variablen unbekannten Namens aus diversen, frei manipulierbaren Quellen ungefragt in den globalen Scope gehämmert wurden.

    Das ist ja Wahnsinn.

    Das _war_ Wahnsinn.

    Welche Fallunterscheidungen machen denn Sinn, damit das Script seine Variablen mit den PHP Versionen 4.1 bis 5.x sauber verarbeitet?

    Welche stellst Du Dir denn vor?

    Wie geht Ihr mit dieser Umstellung um?

    So, wie in jeder anderen Programmiersprache auch: Ich deklariere die Variablen, die ich brauche, und initialisiere sie aus definierten, bekannten Quellen.

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. Hallo Cheatah.

      Muss ich für normale Variablen wirklich Abfragen für $HTTP_GET_VARS (PHP < 4.1) machen, ab PHP4.1 $_GET etc.

      selbstverständlich. Du musstest das eigentlich schon immer, (...)

      Bedeutet dies, dass alle PHP 5.x Variablen auch unter PHP 4.x lauffähig sind?

      Gruß, Ashura

      --
      Selfcode: sh:( fo:) ch:? rl:( br:^ n4:& ie:{ mo:) va:) de:> zu:) fl:( ss:| ls:[ js:|
      Try it: Become an Opera Lover in 30 days
      1. Hello,

        Muss ich für normale Variablen wirklich Abfragen für $HTTP_GET_VARS (PHP < 4.1) machen, ab PHP4.1 $_GET etc.

        selbstverständlich. Du musstest das eigentlich schon immer, (...)

        Bedeutet dies, dass alle PHP 5.x Variablen auch unter PHP 4.x lauffähig sind?

        Variablen laufen hoffentlich nicht... ;-)

        Aber die klassisch programmierten Scripte von PHP5 sollte man eigentlich auch noch unter PHP4 zum Laufen bringen. Es gibnt bei PHP einen breiten Übernahmebereich. Nur mit den OOP-Eigenschaften von PHP5 wird die 4er Version i.d.R. überhaupt nicht klarkommen.

        Harzliche Grüße aus http://www.annerschbarrich.de

        Tom

        --
        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
        Nur selber lernen macht schlau
        1. Hallo Tom.

          Aber die klassisch programmierten Scripte von PHP5 sollte man eigentlich auch noch unter PHP4 zum Laufen bringen.

          Gut zu wissen, danke.

          Nur mit den OOP-Eigenschaften von PHP5 wird die 4er Version i.d.R. überhaupt nicht klarkommen.

          Da ich (noch) keine Ahnung habe, was das sein soll, vermute ich mal, dass ich es momentan noch nicht benötige / benutze.

          Gruß, Ashura

          --
          Selfcode: sh:( fo:) ch:? rl:( br:^ n4:& ie:{ mo:) va:) de:> zu:) fl:( ss:| ls:[ js:|
          Try it: Become an Opera Lover in 30 days
          1. Nur mit den OOP-Eigenschaften von PHP5 wird die 4er Version i.d.R. überhaupt nicht klarkommen.

            HI!

            OOP bedeutet [O]bjekt [O]rientiertes [P]rogrammieren, gemeint sind damit Classes.

            gruß Nudel

            1. Hallo Nudel.

              OOP bedeutet [O]bjekt [O]rientiertes [P]rogrammieren, gemeint sind damit Classes.

              *g* Da hätte ich auch selbst mal suchen können...
              Classes sagen mir schon eher etwas.

              Gruß, Ashura

              --
              Selfcode: sh:( fo:) ch:? rl:( br:^ n4:& ie:{ mo:) va:) de:> zu:) fl:( ss:| ls:[ js:|
              Try it: Become an Opera Lover in 30 days
              1. Ich meine, aber keine Schoolclasses, nech ;-)

                1. Hallo Nudel.

                  Ich meine, aber keine Schoolclasses, nech ;-)

                  Klasse Klasse, wie? ;)

                  Gruß, Ashura

                  --
                  Selfcode: sh:( fo:) ch:? rl:( br:^ n4:& ie:{ mo:) va:) de:> zu:) fl:( ss:| ls:[ js:|
                  Try it: Become an Opera Lover in 30 days
          2. Hi,

            Da ich (noch) keine Ahnung habe, was das sein soll, vermute ich mal, dass ich es momentan noch nicht benötige / benutze.

            Einige der 5er Funktionen kann an mittels upgrade.php auch in älteren Versionen nutzen. :-)

            Gruß, Cybaer

            --
            Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!
            1. Hello,

              Da ich (noch) keine Ahnung habe, was das sein soll, vermute ich mal, dass ich es momentan noch nicht benötige / benutze.

              Einige der 5er Funktionen kann an mittels upgrade.php auch in älteren Versionen nutzen. :-)

              Hier gings nicht um Funktionen, sondern um das Objektmodell und seine Helferlein und z.B. um die Namensräume. Die sind in PHP 5.x gänzlich anders, als in PHP 4.x

              Harzliche Grüße aus http://www.annerschbarrich.de

              Tom

              --
              Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
              Nur selber lernen macht schlau
              1. Hi,

                Die sind in PHP 5.x gänzlich anders, als in PHP 4.x

                Ich wollte wg. einer kleinen Anmerkung keinen neuen Zweig aufmachen! ;-)

                Gruß, Cybaer

                --
                Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!
  2. Hello,

    globals on

    globals on    $HTTP_*_VARS    $_*

    globals off   $HTTP_*_VARS    $_*

    PHP5     gloabls off   $HTTP_*_VARS    $_*

    PHP5     globals off                   $_*

    So ungefähr ist die Entwicklung.

    Die reduntanen einfach-globalen Arrays sind noch eine Weile gültig. Irgendwann werden die Redundanzen aber bestimmt auch per Default abgeschaltet. Bis dahin solltest Du auf die Superglobalen umgestellt haben.

    Harzliche Grüße aus http://www.annerschbarrich.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau
  3. Moin!

    Muss ich für normale Variablen wirklich Abfragen für $HTTP_GET_VARS (PHP < 4.1) machen, ab PHP4.1 $_GET etc.
    Das ist ja Wahnsinn. Bin gerade völlig am Durchdrehen.

    PHP 4.0.x sollte man nicht mehr einsetzen. Das ist hinsichtlich der Variablen tatsächlich inkompatibel, weil es $_GET etc. nicht kennt.

    Und PHP ab 4.1.0 kennt $_GET & Co., kann also ohne Probleme auf allen nachfolgenden Versionen betrieben werden.

    Welche Fallunterscheidungen machen denn Sinn, damit das Script seine Variablen mit den PHP Versionen 4.1 bis 5.x sauber verarbeitet? Wie geht Ihr mit dieser Umstellung um?

    Wenn du ab 4.1 aufwärts arbeitest, hast du kein Problem. Nimm einfach nur nicht die alten $HTTP_GET_VARS.

    Und wenn du wirklich mit viel Aufwand alle alten PHP-Versionen unterstützen mußt, dann bietet es sich an, alle dafür notwendigen Abfragen in einer zentralen Datei zu halten und aus den diversen unterschiedlichen Quellen dann lieber ein einheitliches Interface mit eigenen, selbst definierten Variablen oder vielleicht sogar Klassen zu erzeugen. Dann mußt du diese Kompatibilitätsbibliothek nur einmal zentral erstellen (dürfte auch hinsichtlich der diversen Einstellungsvarianten z.B. von magic_quotes_gpc sinnvoll sein) und greifst in allen deinen Skripten dann einheitlich auf die externen Daten zu.

    Klingt mir allerdings nach zuviel Aufwand. Alte PHP-Versionen werden selten, schließlich gibt es eigentlich immer Gründe, ein Update zu machen - meist sind irgendwelche Sicherheitslücken behoben, und es gibt auch interessante neue Features.

    • Sven Rautenberg
    1. Hello Sven,

      ich habe das jetzt so verstanden, dass ein für > PHP 4.3 geschriebenes Script auch noch auf PHP 4.0 laufen soll. Das ist aber nicht möglich, wenn man mit den Superglobalen Variablen arbeitet.

      Oder wie war das jetzt gemeint?

      Harzliche Grüße aus http://www.annerschbarrich.de

      Tom

      --
      Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
      Nur selber lernen macht schlau
      1. Hi,

        ich habe das jetzt so verstanden, dass ein für > PHP 4.3 geschriebenes Script auch noch auf PHP 4.0 laufen soll. Das ist aber nicht möglich, wenn man mit den Superglobalen Variablen arbeitet.

        Warum sollte das nicht möglich sein?

        Mit isset() kannst Du doch feststellen, was an Variabeln existiert und mit der Konstanten PHP_VERSION kannst Du z.B. sowieso in Abhängigkeit von der verwendeten PHP-Version eine jeweils passende "Kompatibilitäts-Bibliothek" einbinden.

        Gruß, Cybaer (abwärts-kompatibel zu 4.1 programmierend)

        --
        Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!
        1. Hello,

          Mit isset() kannst Du doch feststellen, was an Variabeln existiert und mit der Konstanten PHP_VERSION kannst Du z.B. sowieso in Abhängigkeit von der verwendeten PHP-Version eine jeweils passende "Kompatibilitäts-Bibliothek" einbinden.

          Dann ist es nicht für PHP > 4.3 geschrieben, sondern eben für Versionen "von bis".
          Durch reine Konfiguration des Servers wird das Script nicht abwärtskompatibel.

          Hoast mi jeatz? :-))

          Harzliche Grüße aus http://www.annerschbarrich.de

          Tom

          --
          Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
          Nur selber lernen macht schlau
          1. Hi,

            Hoast mi jeatz? :-))

            Klaaaar. Aber ich denke, es war eben nicht so gemeint. ;-))

            Gruß, Cybaer

            --
            Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!