PHP

PHP (rekursives Akronym für „PHP: Hypertext Preprocessor“, ursprünglich „Personal Home Page Tools“) ist eine Skriptsprache mit einer an C bzw. Perl angelehnten Syntax, die hauptsächlich zur Erstellung dynamischer Webseiten verwendet wird. Bei PHP handelt es sich um Open-Source-Software.

PHP zeichnet sich besonders durch die leichte Erlernbarkeit, die breite Datenbankunterstützung und Internet-Protokolleinbindung sowie die Verfügbarkeit zahlreicher, zusätzlicher Funktionsbibliotheken aus. Es existieren zum Beispiel Bibliotheken, um Bilder und Grafiken zur Einbindung in Webseiten dynamisch zu generieren.


Allgemein


Darstellung der Funktionsweise von PHP

PHP ist eine serverseitig interpretierte Sprache. Das bedeutet, dass der Quelltext – im Gegensatz zu JavaScript, welches in der Regel clientseitig ausgeführt wird – nicht an den Browser übermittelt wird, sondern an einen Interpreter auf dem Webserver. Erst dessen Ausgabe wird an den Browser geschickt. In den meisten Fällen ist dies ein HTML-Dokument, wobei es mit PHP aber auch möglich ist, andere Datentypen, wie z. B. Bilder oder PDF-Dateien, zu generieren.

Mit PHP lassen sich auch Skripte, die nichts mit dem WWW zu tun haben (ebenso wie beispielsweise mit Perl), schreiben. Mit einer GTK-Erweiterung kann sogar eine grafische Oberfläche hinzugefügt werden. Hierfür wird weder ein Webserver noch ein Browser benötigt.

Um eine PHP-Datei allerdings im Rahmen einer Webanwendung ausführen zu können, benötigt man ein System, das mit den in der Datei enthaltenen Anweisungen umzugehen weiß. Aus diesem Grund wird durch eine Schnittstelle (beispielsweise ISAPI oder CGI) der Interpreter von einem Serverdaemon bzw. Serverdienst (in der Regel Apache oder IIS) ausgeführt. Die auf WWW-Servern übliche Kombination von Linux/Windows als Betriebssystem, Apache als Webserver, MySQL-Server als Datenbank und PHP wird LAMP bzw. WAMP genannt. Fertige LAMP- und WAMP-Pakete, die das einzelne Laden und Konfigurieren von Paketen aus dem WWW unnötig machen, werden im Projekt XAMPP entwickelt, wobei es inzwischen Versionen für Linux, Solariss, Windows und Mac OS X gibt.

Die Vorteile der serverseitigen Ausführung sind, dass beim Client (Browser) keine speziellen Fähigkeiten erforderlich sind oder Inkompatibilitäten auftreten können, wie es beispielsweise bei JavaScript und den verschiedenen Browsern der Fall ist. Außerdem bleibt der PHP-Quelltext der Seite auf dem Server und nur die generierten Daten sind für den Besucher einsehbar. Gleiches gilt für andere Ressourcen wie z. B. Datenbanken, die daher auch keine direkte Verbindung zum Client benötigen.

Nachteilig ist, dass jede Aktion des Benutzers erst bei einem erneuten Aufruf der Seite erfasst werden kann. Da PHP normalerweise in einer Webserverumgebung läuft, unterliegt es auch dem zustandslosen HTTP (allerdings wirkt PHP mit seinem Sessionmechanismus dagegen an). Außerdem wird jede PHP-Seite vom Server interpretiert, wodurch dessen Belastung steigt. Diese Vor- und Nachteile sind nicht PHP-spezifisch, sondern treten bei grundsätzlich jeder Webanwendung auf. Zusätzlich liest, prüft und übersetzt der Interpreter den Quelltext bei jedem Aufruf erneut. Dies mindert die Reaktionsgeschwindigkeit des Servers und erhöht nochmals die Auslastung. Um dem entgegen zu wirken, wurde eine Erweiterung namens MMCache entwickelt. Diese speichert eine zur Ausführung vorbereitete Version des Programms zwischen und beschleunigt somit den Zugriff auf diese Datei beim nächsten Aufruf. Der MMCache wird inzwischen nicht mehr weiterentwickelt, seine Stelle nimmt der Nachfolger eAccelerator ein.

PHP ist zeitweise etwas ungesteuert gewachsen. So funktioniert der Zugriff auf eine Datenbank mittels der MySQL-Funktionen anders als über ODBC; noch deutlicher wird dies beispielsweise bei Inkonsistenzen der Funktionen zur String-Verarbeitung. Zwar besitzt PHP bereits seit Version 3 grundlegend die Funktionalität, um objektorientiertes Programmieren zu unterstützen (diese wurden in Version 4 deutlich verbessert), bisher ist jedoch die gesamte Standardbibliothek prozedural angelegt. Auch bei objektorientierten Sprachen übliche Features wie Kapselung der Daten (z. B. private Variablen), Destruktoren (ersatzweise lässt sich aber in den meisten Fällen die Funktion register_shutdown_function() verwenden) oder Fehlerbehandlung per Exceptions (lediglich etwas unsauberer Workaround mit set_error_handler(), error_reporting() möglich) suchte man in PHP 4 noch vergeblich.

Die aktuelle Version, mit der neuen Zend Engine 2, ist seit dem 13. Juli 2004 PHP 5. Um die Missstände aus der vorherigen Version zu beheben, wurden Änderungen am Verhalten von PHP selbst nötig (so sind Variablen in PHP 5, wie bei den meisten Sprachen, nur noch eine Referenz auf das Objekt und nicht wie in PHP 3 und 4 das Objekt selbst). In PHP 5 wurden außerdem wichtige OOP-Features wie z.B. Destruktoren und die Festlegung der Sichtbarkeit einer (Klassen-)Eigenschaft (public, private oder protected) ergänzt. In PHP 5.1 wurde mit PHP Data Objects (PDO) eine neue, objektorientierte Erweiterung aufgenommen, die einen einheitlichen Zugriff auf die verschiedenen SQL-Datenbanken ermöglicht.

Performance

Da es sich bei PHP um eine Skriptsprache handelt, wird diese bei jedem Aufruf neu interpretiert. Dies führt bei umfangreichen Projekten schnell zu Performanceeinbrüchen. Abhilfe kann hier ein Vorinterpretieren mittels eines Op-Code Caches sein. Da dies bei PHP im Gegensatz zu Java nicht standardmäßig vorgesehen ist, muss man existierende Caches von Hand einbinden.

Beispiel für diese Caches sind Turck-mmCache und dessen Nachfolger eAccelerator (beide Open Source und Freeware) und ein kommerzielles Tool von Zend. Der Performancegewinn beträgt durchaus einige hundert Prozent.