Sven Rautenberg: Was macht dieser befehl?

Beitrag lesen

Moin!

Dann kommt das hier:
$_POST=&$HTTP_POST_VARS;

Bedeutes es, das er aus anstatt $_POST -> $HTTP_POST_VARS benutzt, obwohl unterhalb des Scriptes $_POST["..."] steht?

Nein.

Es wird versucht, einheitlich auf $_POST zuzugreifen. Wenn die PHP-Version kleiner als 4.1.0 ist, existiert dieses superglobale Array aber nicht, und deshalb wird eine Referenz auf $HTTP_POST_VARS erzeugt. Das ist im Prinzip eine Wertzuweisung (man hätte auch $_POST = $HTTP_POST_VARS schreiben können). Der Unterschied ist, dass eine Referenz für den einen Variablenwert einen zweiten Variablennamen definiert. PHP spart sich damit das Kopieren des Variableninhalts (geht schneller), und Änderungen über den einen Variablennamen gelten auch für jeden anderen Variablennamen.

Der Unterschied ist: PHP kleiner 4.1 kennt keine superglobalen Variablen, und dieser Trick führt auch nicht dazu, dass sie existieren. Superglobale Variablen kann man überall (auch innerhalb von Funktionen) immer direkt ansprechen. $HTTP_POST_VARS mußte man, wenn man sie in Funktionen verwenden wollte, mit "global" erst zugriffsfähig machen.

Dieser Code ist also nicht die Universallösung für alle Kompatibilitätsprobleme zwischen PHP 4.1 und davor. PHP 4.1 bietet ja HTTP_POST_VARS auch noch weiterhin an, und vermutlich erst mit PHP 5 wird sie abgeschafft werden. Da PHP 5 aber sowieso einige grundsätzliche Änderungen mitbringen wird, so dass Skripte nicht wirklich zwingend ohne Überarbeitung laufen werden (das ist jedenfalls meine persönliche Erwartung), und auch nicht zu erwarten ist, dass plötzlich alle Hoster nur noch PHP 5 anbieten werden, ist also ohnehin irgendwann ein harter Wechsel notwendig.

- Sven Rautenberg

--
Die SelfHTML-Developer sagen Dankeschön für aktuell 20885,68 Euro Spendengelder!