Anzeige
Anzeige
UX & Design
Artikel merken

Schneller coden mit PEAR

PEAR ist eine umfangreiche Bibliothek, in der Sie fertige PHP-Klassen für ein breites Anwendungsspektrum finden. Warum also immer selbst das Rad neu erfinden?

6 Min. Lesezeit
Anzeige
Anzeige

Das „PHP Extension and Application Repository“, kurz PEAR genannt, wurde von Stig S. Bakken ins Leben gerufen. Die Idee dahinter ist einfach: Es sollte ein umfangreiches Repository von frei verfügbaren Klassen aufgebaut werden, um den Entwicklern viel Zeit und Nerven bei der Suche nach der benötigten Klasse zu ersparen.

Anzeige
Anzeige

PEAR sollte das ändern. Es sollte ein zentraler Anlaufpunkt sein, an dem alle relevanten Klassen zu finden sind. Diese sollten zuverlässig, getestet und dokumentiert sein.

Wenn Sie sich noch nie mit PEAR beschäftigt haben, sollten Sie vielleicht erst einmal auf der Website des Projekts [1] stöbern. Hier gibt es eine nach Kategorien eingeteilte Liste der verfügbaren Klassen. Jede der Klassen hat ihre eigene Homepage mit Informationen über die Klasse selbst, den Autor, den Entwicklungsfortschritt sowie einen Link zur Dokumentation des Pakets. Sollten Sie selbst Entwickler sein, dann kennen Sie die chronische Unlust, eine Dokumentation zu erstellen. Das geht den PEAR-Entwicklern leider nicht anders. Mit anderen Worten: Viele Pakete haben keine „End-User-Dokumentation“, sie verfügen jedoch alle über eine API-Dokumentation, in der die Nutzung der Objekte und Methoden weitreichend beschrieben ist. Für weitere Informationen finden Sie beim Galileo-Verlag noch ein Open Book [2], das viele der Pakete erläutert.

Anzeige
Anzeige

Paketdienst

Wenn Sie auf die Shell Ihres Servers zugreifen können, ist die Einbindung der Pakete nun gar nicht so schwierig. Nutzen Sie ein Standard-PHP unter Windows, müssen Sie zunächst die Batch-Datei „go-pear.bat“ aufrufen; unter Linux gelangt man sofort mit dem Befehl „pear“ in die Pear-Konsole.

Anzeige
Anzeige

Um das Paket „Spreadsheet_Excel_Writer“ zu installieren, geben Sie einfach „pear install –alldeps Spreadsheet_Excel_Writer“ ein. Bevor wir dazu kommen, warum Sie jetzt vielleicht eine Fehlermeldung erhalten haben, möchte ich Ihnen noch den Aufbau des Befehls erläutern. Bei dem Befehl „pear“ handelt es sich um ein Skript, das PHP seit der Version 4.2 standardmäßig mitbringt. Abhängig von der genutzten Entwicklungsumgebung kann das Skript durchaus auch mal anders heißen. Bei SUSE zum Beispiel heißt der Befehl – je nach PHP-Version – „pear5“ oder „pear4“.

Das Argument „install“ weist das Skript an, das Paket zu installieren, und der Parameter „–alldeps“ sorgt dafür, dass alle von „Spreadsheet_Excel_Writer“ benötigten Pakete automatisch mitinstalliert werden.

Anzeige
Anzeige

Zurück zur Fehlermeldung: Unter Umständen bricht das System in Ermangelung eines „Stable-Release“ die Installation ab. Einige Pakete stehen bisher nur in der Alpha- oder Beta-Version zur Verfügung. Das rührt daher, dass für viele Pakete bereits bestehender Code, der schon stabil lief, in das PEAR-Projekt übernommen wurde. Dort wird das Paket dann automatisch als Alpha-Version geführt. Kein Grund zur Sorge! Um den Installer zu überzeugen, ein Alpha- oder Beta-Paket zu installieren, geben Sie einfach „pear config-set preferred_state alpha“ bzw. „ (…) beta" ein. Der Installer kennt aber noch eine ganze Menge anderer Features – möchten Sie mehr darüber erfahren, dann tippen Sie einfach „pear help“ ein.

Wer keinen Zugriff auf die Shell hat, kann die grafische Oberfläche „go-pear“ benutzen [3]. Nach dem Aufruf der Website sehen Sie den Quelltext eines Skripts im Browser. Den Code – der allerdings PHP 5 benötigt – kopieren Sie einfach auf Ihren Server. Nutzen Sie am besten ein geschütztes Verzeichnis, damit niemand unerlaubt darauf zugreifen kann. Beim ersten Aufruf der Datei im Browser müssen Sie noch einige kleinere Einstellungen (Verzeichnisse etc.) vornehmen. Üblicherweise können Sie die Vorschläge aber einfach übernehmen und die PEAR-Pakete sofort per Mausklick installieren.

Die dritte Möglichkeit, PEAR in Ihre Projekte einzubinden, ist, die einzelnen Pakete direkt von der Website herunterzuladen und die Klassendatei dann direkt mit einem „require_once“ einzubinden. Da allerdings alle Klassen auf PEAR aufbauen, benötigen Sie zumindest noch die Klasse PEAR selbst. Auch diese Datei können Sie auf pear.php.net herunterladen. Damit es keine Probleme mit dem Inkludieren der Klassen gibt, sollten Sie den Ordner, in dem die PEAR-Klassen liegen, mit in den Pfad aufnehmen. Wenn Sie keinen Zugriff auf die php.ini haben, dann stellen Sie Ihren Skripten am besten diese Zeilen voran:

Anzeige
Anzeige
PHP
$path = '/pfad/zu/pear';
set_include_path(get_include_path() . PATH_SEPARATOR . $path);

Listing 1

Pakete nutzen

Haben Sie ein Paket über den Installer installiert, dann können Sie es einfach mit „require_once()“ einbinden. Hierbei stellt der erste Teil des Paketnamens den Pfad innerhalb des PEAR-Ordners dar. Wollen Sie das Paket „HTML_Quickform“ nutzen, dann nutzen Sie also das folgende require_once():

PHP
require_once('HTML/Quickform.php');

Listing 2

Bei dem eben schon erwähnten Paket „Spreadsheet_Excel_Writer“ lautet der Pfad dementsprechend „Spreadsheet/Excel/Writer.php“. Sie werden feststellen, dass der Name des ersten Unterverzeichnisses (fast immer) auch der Kategorie entspricht, welcher das Paket innerhalb von PEAR zugeordnet ist. In einigen Fällen – wie beim Excel-Writer – stimmt das allerdings aus historischen Gründen nicht. Die Nutzung des eingebundenen Pakets unterscheidet sich von Fall zu Fall. Bei einigen Paketen können Sie einfach mit „new“ ein Objekt ableiten:

PHP
$excel = new Spreadsheet_Excel_Writer();

Listing 3

In anderen Fällen bringt das Paket eine gesonderte Factory-Methode mit, die Ihnen dann ein Objekt zurückgibt. Dies ist zum Beispiel bei dem Datenbank-Paket MDB2 der Fall:

Anzeige
Anzeige
PHP
$mdb2 = MDB2::connect('mysql://root:geheim@localhost/test);

Listing 4

Ein paar kleinere Pakete bieten nur statische Methoden an, in diesen Fällen sollte kein Objekt genutzt werden.

Fehlerbehandlung

Die Fehlerbehandlung funktioniert für alle Pakete gleich. Hierzu ist in PEAR eine Klasse namens „PEAR_Error“ vorgesehen. Sollte eine Methode einen Fehler feststellen, so gibt sie ein Objekt dieser Fehlerklasse zurück, welches Sie mit der in PEAR definierten statischen Methode „isError()“ prüfen können. Das kann beispielsweise so aussehen:

PHP
$excel = new Spreadsheet_Excel_Writer();

Listing 5

Mit der hier genutzten Methode „getMessage()“ können Sie die Fehlermeldung auslesen. Zusätzlich ist noch die Methode „getCode()“ deklariert, mit der Sie einen Fehlercode auslesen können. In der Dokumentation finden Sie viele weitere Methoden zur Fehlerbehandlung.

Anzeige
Anzeige

Schnelle Tabelle

Um den Überblick zu PEAR abzurunden, möchte ich noch eines meiner Lieblingspakete vorstellen: „Spreadsheet_Excel_Writer“. Sicher kennen Sie das Problem: Ein Kunde möchte bestimmte Daten herunterladen können, um sie dann offline auszuwerten , zum Beispiel Bestellungen, Klickraten oder Ähnliches. Oft ist der Download aber nur als CSV-Datei möglich – wie wäre es stattdessen, dem Kunden gleich eine Excel-Datei zu liefern, die schon formatiert ist oder sogar schon Formeln enthält? Mit diesem Paket ist das alles kein Problem.

Nachdem Sie das Paket wie oben beschrieben installiert haben, können Sie sofort durchstarten. Sowohl Excel als auch OpenOffice Calc verwalten einzelne Arbeitsblätter, indem sie diese zu Mappen zusammenfassen. Wenn Sie eine neue Datei generieren wollen, dann leiten Sie erst ein Objekt ab, welches der Mappe entspricht. In diesem legen Sie dann ein Arbeitsblatt an, in welches Sie die Werte einfügen können. Und so sieht der Code dazu aus:

PHP
// Einbinden der Klassen-Datei
require_once 'Spreadsheet/Excel/Writer.php';

// Neues Objekt (Arbeitsmappe) ableiten 
$mappe = new Spreadsheet_Excel_Writer();

// Tabellenblatt einfuegen
$preise = $mappe->addWorksheet('Preise');

//Fehler aufgetreten?
if (PEAR::isError($preise))
{
 die ($preis->getMessage());
}

//Daten in Tabellenblatt einfuegen
$preise -> write(0,0,'Bezeichnung');
$preise -> write(0,1,'Preis');
$preise -> write(1,0,'Monitor');
$preise -> write(1,1,'180,00 Euro');
$preise -> write(2,0,'Computer');
$preise -> write(2,1,'499,00 Euro');
$preise -> write(3,0,'Notebook');
$preise -> write(3,1,'999,00 Euro');

// Mappe senden 
$res = $mappe -> send ('preise.xls');

//Fehler aufgetreten?
if (PEAR::isError($res))
{
 die ($res->getMessage());
}

// Aufraeumen 
$mappe -> close();

Listing 6

Die Methode „addWorksheet()“ fügt ein neues Tabellenblatt mit Namen „Preise“ ein. Die Methode „write()“ bekommt die Zeilen- und die Spaltennummer sowie den Wert übergeben, der in das Feld eingefügt werden soll. Die Methode „send()“ schickt die fertig

Anzeige
Anzeige

generierte Datei dann direkt an den Browser und der Aufruf von „close()“ gibt den belegten Speicher wieder frei. Viel schneller und einfacher kann man eine solche Datei wohl kaum erzeugen.

Das Paket bietet noch viel mehr, Sie können zum Beispiel Formeln und Farben nutzen, Bilder einbinden und auch den Ausdruck formatieren. Wenn Sie das Paket interessant finden, dann werfen Sie doch einmal einen Blick in die Dokumentation.

Fazit

PEAR enthält viele gute Pakete, zum Beispiel Spreadsheet_Excel_Writer, MDB2 oder Quickform2 – einige Pakete sind aber nicht wirklich zu empfehlen. Bevor Sie sich für den Einsatz eines Pakets entscheiden, sollten Sie es ausführlich testen und einen Blick auf die Bug-Reports werfen.

Anzeige
Anzeige

Ein großes Problem bei PEAR ist die „Style-Police“. Das PEAR-Projekt setzt auf Coding Guidelines und besteht bei jedem Entwickler darauf, dass sie eingehalten werden. Viele Entwickler wollen ihren Stil jedoch nicht ändern. Dies hat dazu geführt, dass einige Pakete nicht mehr über den PEAR-Server verfügbar sind. Die meisten dieser Pakete nutzen aber nach wie vor die anderen PEAR-Komponenten und sind weiterhin – leicht abgeändert – über den PEAR-Installer installierbar. Wie Sie ein solches Paket installieren, können Sie auf der Homepage des Pakets nachlesen.

Mehr zu diesem Thema
Fast fertig!

Bitte klicke auf den Link in der Bestätigungsmail, um deine Anmeldung abzuschließen.

Du willst noch weitere Infos zum Newsletter? Jetzt mehr erfahren

Anzeige
Anzeige
Schreib den ersten Kommentar!
Bitte beachte unsere Community-Richtlinien

Wir freuen uns über kontroverse Diskussionen, die gerne auch mal hitzig geführt werden dürfen. Beleidigende, grob anstößige, rassistische und strafrechtlich relevante Äußerungen und Beiträge tolerieren wir nicht. Bitte achte darauf, dass du keine Texte veröffentlichst, für die du keine ausdrückliche Erlaubnis des Urhebers hast. Ebenfalls nicht erlaubt ist der Missbrauch der Webangebote unter t3n.de als Werbeplattform. Die Nennung von Produktnamen, Herstellern, Dienstleistern und Websites ist nur dann zulässig, wenn damit nicht vorrangig der Zweck der Werbung verfolgt wird. Wir behalten uns vor, Beiträge, die diese Regeln verletzen, zu löschen und Accounts zeitweilig oder auf Dauer zu sperren.

Trotz all dieser notwendigen Regeln: Diskutiere kontrovers, sage anderen deine Meinung, trage mit weiterführenden Informationen zum Wissensaustausch bei, aber bleibe dabei fair und respektiere die Meinung anderer. Wir wünschen Dir viel Spaß mit den Webangeboten von t3n und freuen uns auf spannende Beiträge.

Dein t3n-Team

Melde dich mit deinem t3n Account an oder fülle die unteren Felder aus.

Bitte schalte deinen Adblocker für t3n.de aus!
Hallo und herzlich willkommen bei t3n!

Bitte schalte deinen Adblocker für t3n.de aus, um diesen Artikel zu lesen.

Wir sind ein unabhängiger Publisher mit einem Team von mehr als 75 fantastischen Menschen, aber ohne riesigen Konzern im Rücken. Banner und ähnliche Werbemittel sind für unsere Finanzierung sehr wichtig.

Schon jetzt und im Namen der gesamten t3n-Crew: vielen Dank für deine Unterstützung! 🙌

Deine t3n-Crew

Anleitung zur Deaktivierung
Artikel merken

Bitte melde dich an, um diesen Artikel in deiner persönlichen Merkliste auf t3n zu speichern.

Jetzt registrieren und merken

Du hast schon einen t3n-Account? Hier anmelden

oder
Auf Mastodon teilen

Gib die URL deiner Mastodon-Instanz ein, um den Artikel zu teilen.

Anzeige
Anzeige