Hauptmenü

Untermenü

PHP/MySQL - register_globals - Überblick

1. Die Abschnitte

2. Aber das funzt net

Diesen Spruch kann man in den einschlägigen Foren immer wieder von leidgeprüften Anfängern hören. In vielen Fällen geht es einfach nur darum, dass man angeblich keinen Zugriff auf GET-Parameter, Formularinhalte oder Sessions hat. Dieses Problem ist zwar mittlerweile schon gefühlte tausend Jahre alt, taucht aber leider immer wieder auf. Darum führt euch die folgenden Erläuterungen genau zu Gemüte, da erspart ihr euch viel Arbeit und Rumsucherei.

3. Die Wurzel allen Übels

PHP wurde ursprünglich als möglichst einfache Sprache entwickelt, die schnell zu erlernen sein sollte. Dabei haben es die Entwickler anfangs wohl ein wenig übertrieben. So konnte man in der Version 3 problemlos auf GET- oder POST-Werte zugreifen, indem man einfach den jeweiligen Namen nahm und davor ein $-Zeichen knallte. Leider führte das dazu, dass man höllisch aufpassen musste, um nicht aus Versehen irgendwelche Variablen zu überschreiben. Außerdem ergaben sich dadurch riesige Sicherheitslücken, da böswillige Menschen zum Beispiel durch einfache Manipulation von GET-Parametern fürchterlichen Unfug treiben konnten.

4. Geltungsbereich

Dieses Problem existierte sowohl bei den schon erwähnten GET- oder POST-Werten als auch bei Session- oder Cookie-Inhalten. Aus Gründen der Übersichtlichkeit (und auch der Faulheit) konzentriere ich mich hier ausschließlich auf die ersten drei Möglichkeiten. Das Prinzip ist bei der letzten Variante aber praktisch identisch.

5. Die Änderung

Um die oben beschriebenen Probleme zu beseitigen, wurde bereits mit PHP 4.0.1 eine neue Art der Behandlung eingeführt. Da es aber damals noch Scripte zu hauf gab, die auf der Version 3.x basierten, nahmen die Entwickler Rücksicht auf all die Betroffenen und beließen es in der Standardkonfiguration von PHP wie gehabt. Erst mit dem Erscheinen von PHP 4.2 wurde diese Änderung zum Standard.

6. Des Rätsels Lösung

... liegt in einem klitzekleinen Eintrag in der Konfigurationsdatei namens php.ini und nennt sich register_globals. Steht dort der Wert auf On, so behält die alte PHP3-Variante ihre Gültigkeit, bei einem Off dagegen muss man sich an den neuen Standard halten.

7. Höhlenmalereien und Faustkeile

Leider hat es sehr lange gedauert, bis sich der neue Standard durchsetzen konnte. Daher wimmelt es auch heutzutage im Internet immer noch von Tutorials und Einführungen zu PHP, die entweder aus der Steinzeit stammten oder von Bildungsresistenten zusammengehauen worden sind. Oder um uralten Code, der ebenfalls schon zig Jahre auf dem Buckel hat. Ich habe schon oft erlebt, dass in meinem Lieblingsforum immer wieder Anfänger sich Scripte gezogen und teilweise sogar dafür bezahlt haben, die auf dieser alten Variante basieren. Leider führt das dazu, dass viele immer noch aufs Glatteis geführt werden. Und sich die Moderatoren in den einschlägigen Foren ebenfalls noch damit rumärgern müssen.

Wichtig!

Hütet euch aber davor, auf eurem lokalen Testsystem aus lauter Faulheit einfach den Eintrag auf On zu setzen. Spätestens wenn ihr eure Dateien auf den Server eines Providers hochladet, ist eigentlich immer hängen im Schacht. Sollte der trotzdem noch die alte Konfiguration haben, so gebe ich euch einen dringenden Rat. Sucht euch einen anderen!

8. Die folgenden Abschnitte

Als erstes werde ich euch (nur) aus Anschauungsgründen die alte Variante zeigen, damit ihr wisst, um was es geht und wo der Hase im Pfeffer liegt. Danach zeige ich euch, wie man mit den so genannten "superglobalen" Arrays arbeitet und auf was ihr dabei achten müsst. Beim letzten Punkt geht es darum, wie man alten Code entsprechend anpassen kann, damit er auch bei der normalen Konfiguration funktioniert.

weiter zum nächsten Abschnitt