PHP 4.2.0: Probleme mit Variablen
Gelesen bei AboutWebDesign.de
URL: http://www.aboutwebdesign.de/awd/content/1036255441.shtml
Ab der PHP-Version 4.2.0 funktionieren manche Scripts auf einmal nicht mehr. Woran kann das liegen?
Variablenübergabe
Weit verbreitet ist ein Problem mit Variablen: so wurden in früheren PHP-Versionen über einen GET-Request übergebene Werte (z.B. .../xyz/skript.php?variable=667) einfach als im Skript globale Variablen übergeben. In unserem Beispiel wäre also eine Variable $variable registriert worden, die den Wert 667 gehabt hätte.
Doch das wurde nun in der Standardeinstellung geändert, u.a. aus Sicherheitsgründen. So wird verhindert, dass Daten von außen den Variablen-Namensraum von Skripten beeinflussen, ohne dass der Programmierer vorher eine explizite Anweisung gegeben hat.
Ist der neue Mechanismus aktiv?
Doch bevor Sie nun Ihre Scripts modifizieren, sollten Sie überprüfen, ob Ihre Probleme überhaupt mit dem neuen Verhalten zu tun haben. Starten Sie daher eine PHP-Datei, die nur den Befehl <?php phpinfo(); ?> enthält, und suchen Sie in der Ausgabe nach dem Wert der Einstellung register_globals. Nur, wenn diese auf off steht, hat sich das Verhalten des Interpreters gegenüber früheren Versionen geändert.
Auf Variablen zugreifen
Doch wie kommen Sie nun an übergebene Werte heran? Verwenden Sie die globalen Umgebungsvariablen. Dabei handelt es sich um assoziative Arrays.
Wenn z.B. ein Wert über die GET-Methode übergeben wurde, verwenden Sie den Befehl $_GET[variable]. Wenn POST verwendet wurde, nehmen Sie stattdessen $_POST[variable].
Auch Server-Eigenschaften, Cookies und mit Formularen übergebene Dateien müssen nun auf diese Art und Weise abgefragt werden. Die zugehörigen Umgebungsvariablen sind $_SERVER, $_COOKIE und $_FILES. Beispiel: $_SERVER['HTTP_USER_AGENT'].
Tipp zur Umstellung
Gerade bei größeren Projekten kann es eine unübersichtliche und mühsame Arbeit sein, die Variablenaufrufe umzustellen. Wir empfehlen daher, am Anfang eines Scripts die entsprechenden Variablen mit dem Wert der globalen Umgebungsvariablen zu deklarieren:
$wert1 = $_GET[wert1];
$wert2 = $_GET[wert2];
Mehr Informationen
... dazu finden Sie in der PHP-Dokumentation unter Predefined Variables.