Ok ich probiers mal *g
- register_globals on
Alle Variablen, die über die URL (also per GET), per Formular (POST) oder cookies (COOKIE) an dein Script übergeben werden, stehen automatisch als globale Variablen zur Verfügung. D.h. wenn zum Beispiel jemand dein Script mit dem Querystring (das is das was hinter den Dateinamen im Adressfenster hängt) "?testvar=value" aufruft, hast du im Script sofort die Variable $testvar mit dem Wert "value". Das mag jetzt gut klingen, ist es aber nicht. Mal angenommen du willst mit einem Script 10 mal "hello world" ausgeben lassen. Is ein banales Beispiel, reicht aber. Dein Script sieht vielleicht so aus:
<?php
while ($a<10) {
echo "hello world";
$a++;
}
?>
Im Normalfall würde das auch 10 mal "hello world" ausgeben. Ruft aber nun jemand das Script mit dem Querystring "?a=5" auf, wird der Text nur 5 mal angezeigt. Mit "register_globals on" alleine passiert der Fehler aber nicht, in diesem Beispiel ist zusätzlich noch der "absichtliche" Fehler eingebaut, die Variable nicht zu initialisieren. For die Schleife gehört normalerweise ein "$a=0;". Ein entsprechend eingerichtetes PHP würde auch diesen Fehler der Notice-Klasse anzeigen.
Wie gesagt, klingt ziemlich banal, aber ich kann mich an heftige und sehr gefährliche Bugs z.B. bei älteren Versionen des vBulletins erinnern, die auf dieser Einstellung beruhen.
- register_globals off
Hier kann das von vorneherein nicht passieren. Die Variablen, die per GET, POST und COOKIE kommen stehen nicht automatisch im globalen Scope sondern müssen über $_GET["variablenname"], $_POST bzw. $_COOKIE angesprochen. $_REQUEST ist eine Zusammenfassung dieser 3 Variablen. Diese 4 Variablen (und noch einige andere) sind superglobal, d.h. sie stehen dir in jeder selbst zusammengeschusterten Funktion oder Klasse automatisch zur Verfügung und müssen nicht wie normale Variablen erst globalisiert werden.
Zusammenfassend heißt das, dass Programmieren mit register_globals off vielleicht etwas umständlicher, dafür aber sicherer, standard-konformer und da PHP weniger zu tun hat, auch schneller ist.