Kompatiblität von PHP-Scripts
Dieser Text soll drei häufige Fehler nennen und beschreiben, weshalb sie auftreten und wie sie sich vermeiden lassen.
1. Die Entwicklungsumgebung
Entwicklungssysteme weichen in der Konfiguration von Webserver und PHP in der Regel stark von den späteren Produktivsystemen
ab, besonders, wenn sie mit einem LAMPP/WAMPP-Fertigpaket laufen. Diese sind ja für Leute gedacht, die schnell in die
Webentwicklung einsteigen wollen, und zwar ohne sich Gedanken über die Installation und Konfiguration des Webservers zu machen.
Insofern stehen bei diesen Installationen auch einfache Bedienung und Fehlertoleranz im Vordergrund und nicht --wie üblich--
Sicherheit und Geschwindigkeit.
Letztlich kann das zu folgenden Problemen führen:
- Eines besteht in der Vielzahl von Zusatzmodulen, die Fertigpaketen in der Regel mitgeliefert werden, auf Produktivsystemen
aber selten zur Verfügung stehen. Der Entwickler merkt dabei nicht unbedingt, dass er auf Funktionen zurückgreift, die nicht in
der Standarddistribution enthalten sind.
- Fertigpakete laden PHP eher als Apache-Modul, während auf Produktivsysteme die CGI-Variante verbreiteter ist, sofern überhaupt
Apache als Webserver eingesetzt wird -- was auch nicht immer der Fall ist. In solchen Fällen stehen spezifische Funktionen
(HTTP-Auth u.ä.) und einige Umgebungsvariablen nicht zur Verfügung.
- Die PHP-Version ist in Fertigpaketen in der Regel deutlich aktueller, daher kann es sein, dass einige Funktionen auf dem Livesystem
noch nicht zur Verfügung stehen.
2. Opening Tag
Es gibt zwei populäre Möglichkeiten, PHP-Code einzuleiten: <?php und <?.
Viele Entwickler machen den Fehler, ihre Scripte mit <? einzuleiten. Fehler deshalb, weil diese sogenannten
"short open tags" oftmals deaktiviert sind. Wenn sie deaktiviert sind, wird der Quelltext angezeigt.
3. Globale Variablen
Dieser Fehler wird nur begangen, wenn man eine PHP-Version bei sich laufen hat, die älter ist als 4.2. Schon lange
gibt es in der php.ini die Einstellung "register_globals", aber vor 4.2 stand sie immer auf "On". Die Entwickler von PHP
raten dazu, die Einstellung aus Sicherheitsgründen ausgeschaltet zu lassen und dies machen die meisten Serverbetreiber
(glücklicherweise) auch. Bei schlecht programmierten Scripts besteht nun das Problem, dass dort, wo eine übergebene
Variable stehen müsste, überhaupt nichts steht.
Wie umgeht man das Problem? Das hängt davon ab, wie die Variable
übergeben wird. Die wichtigsten Methoden sind GET und POST. Formulare verwenden meist POST (das kann man in der
"form action" des Seitenquelltextes ablesen), Links (prinzipbedingt) immer GET. GET-Variablen sind die Variablen,
die man in der Adresszeile des Browsers sieht. Wenn man die Variablen auslesen will, darf man nicht echo $id; schreiben,
sondern muss echo $HTTP_GET_VARS[id] bzw. $_GET[id] nehmen. Wenn man ein Formular auswerten will, muss man
entsprechend $HTTP_POST_VARS[] ($_POST[]) nehmen, für Cookies $HTTP_COOKIE_VARS[] ($_COOKIE[]).