25 PECL
PECL, die Extension Community Library, früher auch »PHP Extension Code Library« genannt, ist eine Sammlung von interessanten PHP-Erweiterungen, die in C programmiert wurden. Diese Erweiterungen sind deutlich performanter und systemnäher als die PEAR-Pakete.
25.1 Allgemeines 

PECL (ausgesprochen »pickle«) ist ein Schwesterprojekt von PEAR. Ursprünglich ein Teil von PEAR, ist PECL inzwischen ein eigenständiges Projekt geworden. Die hier enthaltenen Erweiterungen sind in C programmiert. Das hat den Vorteil, dass sie natürlich deutlich schneller in der Ausführung sind und systemnäher arbeiten können. Allerdings bringt das auch den Nachteil mit sich, dass die Erweiterungen erst auf Ihrem Server kompiliert und eingebunden werden müssen, was nicht immer ganz unproblematisch ist. Die Probleme resultieren zum Teil daraus, dass eine bestimmte Version einer zusätzlichen Bibliothek benötigt wird oder Ähnliches. Vor diesem Hintergrund werden die PECL-Pakete auch eher von Profis genutzt.
Die Auswahl der hier vorgestellten Pakete ist mir nicht leicht gefallen. So ist beispielsweise tidy, ein Paket, mit dem Sie die Validität von HTML-Code prüfen können, in PECL veraltet. Die aktuelle Version ist wieder Bestandteil von PHP 5. Somit habe ich auf tidy verzichtet. Ein anderes Paket, das ich gern vorgestellt hätte, ist mono. Bei mono handelt es sich um ein Projekt, das bemüht ist, Microsofts .Net-Technologie auf Basis von Open-Source zu implementieren. Allerdings ist PECLs mono-Version zurzeit leider ein wenig veraltet, so dass eine Kompilierung nicht ohne weiteres möglich ist.
Andere Pakete können auch schon mal Ihr PHP aus dem Tritt bringen, was dazu führen kann, dass Ihr Server kein PHP mehr verarbeitet. Daher sollten Sie eine PECL-Erweiterung nie auf einem Produktivserver installieren, ohne diese vorher zu testen.
Diese Beispiele erwähne ich deswegen, weil es bei PECL-Paketen sicher nötig ist, noch ein wenig genauer zu prüfen, ob Sie das Paket wirklich nutzen können bzw. nutzen wollen.
Der Server des PECL-Projekts ist unter http://pecl.php.net zu finden. Dort finden Sie auch die entsprechenden Pakete.
Leider ist momentan zu keinem der Pakete eine echte Dokumentation vorhanden, was die Nutzung nicht unbedingt vereinfacht. In einigen Fällen finden Sie in der PHP-Dokumentation einige hilfreiche Seiten. Benötigen Sie beispielsweise Informationen zu blenc, rufen Sie einfach http://www.php.net/blenc auf und werden fündig. Leider wird Ihnen das nicht immer helfen. Die Informationen in der PHP-Dokumentation beziehen sich oft auf die Zeit, als diese PECL-Pakete noch Bestandteil von PHP und nicht des PECL-Projekts waren. Daher sind sie teilweise nicht mehr aktuell.
In einigen Fällen finden Sie Anleitungen oder Präsentationen zu den Paketen auf den Homepages der Entwickler, auf Homepages von Kongressen oder unter der URL http://talks.php.net.
Hilft Ihnen das alles nicht weiter, können Sie auch hier wieder auf Mailinglisten und den Internet Relay Chat zurückgreifen. Die Mailinglisten zu PECL können Sie unter http://pecl.php.net/support.php abonnieren. Den IRC-Channel zu PECL finden Sie im EFNet unter dem Namen #php.pecl.
Haben Sie eine Erweiterung übersetzt und komplett eingebunden, können Sie die Funktion get_extension_funcs() aufrufen. Sie bekommt den Namen der Erweiterung als Parameter übergeben und liefert Ihnen alle enthaltenen Funktionen als Array zurück. Allerdings liefert sie Ihnen wirklich nur die Namen der Funktionen zurück. Somit haben Sie keine Informationen über den Sinn der Funktion, Parameter oder Rückgabewerte. Des Weiteren werden bei objektorientierten Erweiterungen auch keine Methoden oder Klassen ausgelesen.
Wenn alle Stricke reißen, können Sie natürlich auch einen Blick in die Sourcen werfen. Wenn Sie ein wenig Erfahrung in der C-Programmierung haben, sollte Ihnen das kein größeres Problem bereiten.
Bei Erweiterungen, die prozedural arbeiten, erkennen Sie die Deklaration der PHP-Funktionen daran, dass die Funktion mit PHP_FUNCTION() angemeldet wird. PHP_FUNCTION() bekommt den Namen der Funktion, wie sie in PHP verfügbar ist, als Parameter übergeben. Danach folgt dann sofort der C-Code, der die Funktion beschreibt.
Bei objektorientierten Erweiterungen erkennen Sie die Klasse, die die Erweiterung bereitstellt, daran, dass sie mit INIT_CLASS_ENTRY() definiert wird. Der zweite Parameter ist dabei der Name der Klasse, die Sie in PHP aufrufen können. Die Methoden werden jeweils mithilfe von PHP_METHOD() deklariert.