Navigation

Start Projekte Tutorials & Texte Archiv

Unternavigation

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[]).