Help: Frage zu PHP "register_globals"
Klaus
- php
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
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
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
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
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
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
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
Ich meine, aber keine Schoolclasses, nech ;-)
Hallo Nudel.
Ich meine, aber keine Schoolclasses, nech ;-)
Klasse Klasse, wie? ;)
Gruß, Ashura
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
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
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
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
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.
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
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)
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
Hi,
Hoast mi jeatz? :-))
Klaaaar. Aber ich denke, es war eben nicht so gemeint. ;-))
Gruß, Cybaer