Facebook
Twitter
Google+
Kommentare
0

Extending and Embedding PHP

Im Februar habe ich von Andre das Buch Extending and Embedding PHP von Sara Golemon angeboten bekommen, und da ich noch keinen tieferen Blick in die Erstellung von PHP Extensions geworfen habe, habe ich zugeschlagen. Wie man bei Amazon lesen kann ist es DAS Standard-Buch wenn es um PHP Erweiterungen geht. Allgemein gibt es über die Innereien von PHP nur wenig Literatur, umso interessantere Einblicke gibt das Buch.

Die 410 Seiten beginnen mit einem Überblick über den PHP Lebenszyklus. Wie verhält sich PHP im CLI Modus, in einer Multi-Prozess-Umgebung, in einer threaded-Umgebung oder wenn PHP in eine andere Applikation eingebettet wird? Es gibt definierte Initialisierungspunkte, in die sich eine Extension einhängen kann (bzw. muss), und eine threaded Umgebung ist nicht ganz problemfrei wenn es um Datenzugriff etc. geht. Auf jeden Fall interessante Einblicke, was PHP so beim “Start” tut.

PHP Extensions sind in C geschrieben, und so macht man sich mit den grundlegenden Datentypen und dem Speichermanagement bekannt. Um eine erste Hello-World-Extension zu schreiben und zu kompilieren werden diverse Compiler-Tools und eine Umgebung benötigt, die Installation eben dieser wird ausführlich für Linux und Windows beschrieben, sodass um fünften Kapitel die erste Hello World Extension erstellt wird.

Danach geht es weiter mit den verschiedenen Möglichkeiten, einen Wert zurückzugeben, die Kunst der Parameter-Definition, Arrays und HashTables mit Hilfe von Vektoren bzw Linked Lists und der Zend Hash API. Ressourcen sind in PHP besondere Datentypen, sodass auch hier ein Kapitel Licht ins Dunkel bringt, wie man diese erstellt, registriert, zerstört und persistiert.

Wenn die eigene Extension einen objektorientieren Zugriff bieten soll, müssen die Grundlagen zu PHP4 und PHP5 Objekten gelegt sein, was in den Kapiteln 10 und 11 geschieht. Nach diesen jeweils knapp 10 Seiten ist man in der Lage, Methoden zu deklarieren und Attribute sowie Konstanten anzulegen.

Da jede Extension auch seine eigenen php.ini Einstellungen haben kann, wird natürlich auch dies erklärt, inklusive der Möglichkeit, die Extension im phpinfo() Aufruf unterzubringen. Danach geht es etwas ausführlicher in die Materie der Streams, was jedoch teilweise harter Tobak ist.

Die letzten Kapitel behandeln nochmals die Kompilierung, die Nutzung von Libraries sowie Abhängigkeiten zwischen eben diesen, und die Möglichkeiten von Extension Generatoren (ext_skel und PECL_Gen). 20 weitere Seiten behandeln dann das Einbetten von PHP, wobei ich diese Seiten nur überflogen habe, da ich garantiert nichts habe, wo ich PHP einbetten könnte.

Auf der Suche nach dem nächsten Kapitel stiess ich bereits auf die Anhänge, wie die Zend API Referenz und PHP API. 130 Seiten Anhänge (von 410) finde ich etwas viel, aber für jemanden der sich tief einarbeiten möchte sind diese APIs sehr wichtig, und da es sie sonst nirgends so aufgelistet gibt sind sie im Buch enthalten.

Insgesamt ein interessanter Einblick in den PHP Interpreter und den Kern von PHP selbst, den man als normaler Entwickler eigentlich nie zu Gesicht bekommt. Wenn man es gelesen hat versteht man PHP ein wenig mehr, allerdings ist es kein Must-Have meiner Meinung nach. Es nimmt einem aber die Angst, selbst PHP Erweiterungen zu schreiben, wer bereits C Kenntnisse hat kann relativ schnell erste Erfolge verbuchen. Wenn eine performance-kritische Stelle in PHP entdeckt wird, und auch nach allen algorithmischen Verbesserungen die Geschwindigkeit nicht ausreicht, sollte man versuchen den Code in C zu übersetzen und als Extension einzubinden, so schwer ists nicht. Wenn aber die Festplatte oder das Netzwerk oder die Datenbank der Flaschenhals sind (wie es häufig der Fall ist), dann kann da auch eine Extension in C nicht viel helfen.

Einen guten Einblick und Einstieg bieten die Artikel von Sara in der Zend Developer Zone über das Schreiben und Erstellen von PHP Extensions Part 1, Part 2A, Part 2B und Part 3. Sara hat auch auf der ZendCon 2008 über “PHP Extension Writing” gesprochen, der Audio-Mitschnitt ist durchaus hörenswert.

Mal sehen ob ich in den nächsten Tagen dazu komme, mir meine kleine eigene Extension zu bauen, mir fehlt noch eine kleine Idee, was man umsetzen könnte mit wenigen dutzend Zeilen Code.

flattr this!

Über den Autor

PHP Gangsta

Der zweitgrößte deutsche, eher praxisorientierte PHP-Blog von Michael Kliewe veröffentlicht seit Mitte 2009 Artikel für Fortgeschrittene.

Link erfolgreich vorgeschlagen.

Vielen Dank, dass du einen Link vorgeschlagen hast. Wir werden ihn sobald wie möglich prüfen. Schließen