Web-Anwendungen mit PhpBeans
Enterprise-PHP

DeveloperIT-ProjekteSoftware

Große, webbasierte Unternehmensanwendungen waren bis vor kurzem noch eine Domäne von .NET und Java (J2EE). Aber auch mit PHP lassen sich mittlerweile unternehmenskritische Anwendungen realisieren.

Unternehmensanwendungen

Web-Anwendungen mit PhpBeans

PHP haftete lange Zeit das Image an, dass es nur für einfache datenbankgestützte Webseiten taugt und für komplexe Aufgaben nicht einsetzbar ist. Dieser Einwand war einmal berechtigt, doch seit der Einführung von PHP 5 erschließen sich immer mehr Möglichkeiten, um PHP-basierte Anwendungen in größerem Maßstab zu verwenden.

In der Welt der Unternehmensanwendungen sind mehrschichtige Systemarchitekturen die Regel. Hierbei werden verschiedene Aufgaben einer Anwendung in Schichten eingeteilt. Häufig eingesetzt wird das 3-Schichten-Model. Dabei unterscheidet man zwischen:

– Präsentationsschicht
– Logikschicht
– Datenschicht

Die Präsentationsschicht ist für die Benutzerschnittstelle zuständig. Hier werden Daten dargestellt und Eingaben entgegengenommen. In der Logikschicht sind die Verarbeitungsregeln und die Programmlogik implementiert. Die dritte Schicht ist verantwortlich für das Speichern und Laden der Anwendungsdaten.

Die strikte Trennung dieser Funktionen in einzelne Schichten spielt vor allem dann ihre Vorteile aus, wenn die einzelnen Teile aus Gründen der besseren Lastverteilung auf unterschiedlichen Servern ausgeführt werden. Web-Anwendungen sind von Haus aus bereits mehrschichtig. Die Präsentationsschicht ist der Browser des Betrachters: Er rendert den HTML-Code und nimmt Eingaben entgegen. Die Verarbeitung dieser Eingaben findet dann auf dem Webserver mit einer Skriptsprache wie PHP statt. Somit entspricht PHP auf dem Webserver der Logikschicht der Applikation. Eine separate Datenschicht ist dagegen nicht vorhanden, da Datenzugriffe aus PHP meist direkt auf die Datenbank vorgenommen werden und die Skripts selbst entscheiden, welche Daten geladen werden und wie mit ihnen verfahren wird. Oft werden Web-Anwendungen darum 2- oder 2,5-Schicht-Anwendungen genannt.

Um eine richtige Datenschicht zu implementieren, muss es möglich sein, diese auch auf einen anderen Server auszulagern. Zudem ist eine Instanz notwendig, die zu Anfragen die passenden Daten liefert beziehungsweise speichert. Nur diese Instanz kennt den wirklichen physischen Speicherort. Dieses Vorgehen hat einige Vorteile. So kann beispielsweise die komplette Arbeitsweise der Datenspeicherung umstrukturiert werden, ohne dass darüber liegende Schichten geändert werden müssen. Auch ist es für darüber liegende Schichten gleichgültig, welche Daten aus welcher Quelle kommen.

Seit einiger Zeit existieren auch für PHP Erweiterungen, mit denen sich eine solche Anwendungsarchitektur umsetzen lässt. Neben populären Ansätzen wie der Anbindung über Soap oder XML:RPC gibt es eine Reihe von Möglichkeiten, die teilweise zu unrecht ein Schattendasein fristen. Eine davon ist das Open-Source-Projekt PhpBeans (www.phpbeans.com), das im Folgenden genauer vorgestellt wird.


Halbautomatische Installation

Web-Anwendungen mit PhpBeans

Die Installation von PhpBeans erfordert keine besonderen Kenntnisse und geht einfach von der Hand. Grundvoraussetzung ist ein Unix-Server, auf dem Sie Software installieren können. Root-Rechte sind also Voraussetzung für das Einrichten von PhpBeans. Die stabile Version 1.0 kommt als komprimierte Datei mit allen notwendigen Sourcecodes und enthält standardmäßig noch die Version 4.3.8 von PHP. Da heute im Normalfall PHP 5 zum Einsatz kommt, ist hier die erste Handarbeit angesagt.

Nach dem Entpacken des kompletten Server-Sourcecodes enthält das Verzeichnis src einen Ordner mit dem PHP-Quellcode. Um PHP 5 zu verwenden, ersetzen Sie diesen mit einer aktuellen Version: www.php.net. Was bleibt, ist die Anpassung des compile.sh-Skripts. Hier ändern Sie die Variable php_version auf den Verzeichnisnamen der neuen PHP-Version. Ein anschließender Aufruf von

./compile.sh

als root-Benutzer über die Konsole erledigt den Rest der Installationsarbeit. Nach dem Start des PhpBeans-Servers mit

./bin/start.sh

kann dieser über das Netz verwendet werden. In der Grundeinstellung ist das System über den Port 3843 erreichbar. Sollte dieser Port bereits in Verwendung sein, können Sie ihn über die Datei server.conf im config-Unterverzeichnis ändern.


Bohnen über das Netz

Web-Anwendungen mit PhpBeans

Wer jetzt denkt, dass die Aufteilung zwischen Daten- und Applikationsschicht dazu führt, dass die Entwicklung einer Anwendung komplizierter wird, der wird positiv überrascht sein. Die Verwendung serverseitiger Objekte ist sehr einfach. Zuerst muss eine Verbindung zum Beans-Server hergestellt werden. Dies erledigen Sie mit folgenden Zeilen:


include_once ('libs/phpBeans.php');
$client = new PHP_Bean_Client ('10.2.4.57', 3843, 2);
if (! $client->connect ()) {
die ($client->error);
}
if (! $client->authenticate ('dbuser', 'a5t78vs')) {
die ($client->error);
}

Anschließend erzeugen Sie über die Client-Instanz beliebige Objekte des Servers. Diesen Objekten merkt man ihre verteilte Arbeitsweise nicht an. Sie können Sie wie jedes andere PHP-Objekt verwenden.


$obj =& $client->getObject('offer');
$obj->loadFromDb($id);
$obj->set('offerno', $offerno);
$obj->saveToDb();

Allerdings geschieht hinter den Kulissen einiges. Bei jedem Aufruf einer Funktion werden die Übergabeparameter an den Server übertragen, der die Objektfunktion ausführt. Durch die Aufrufe des Beispiel-Listings wird also auf dem Server ein Objekt aus der Datenbank geladen, ein Datensatz verändert und anschließend wieder auf dem Server gespeichert. Einfacher geht es kaum.

Das serverseitige Objekt muss selbstverständlich auch auf diesem gespeichert sein. Alle Server-Objekte müssen Sie dazu im Unterverzeichnis obj der PhpBeans-Installation abgelegen. Damit sie über das Netz verwendet werden können, müssen sie zudem von der Basisklasse PHP_Beans abgeleitet sein, wie es im folgenden Beispiel der Fall ist.


class Bean_Offer extends PHP_Bean {
var $values = array ();
function Bean_Offer (&$server) {
$this->init ($server);
$this->namespace = 'test';
$this->addMethods (__FILE__);
}
/**
* Sets a named value.
* @access public
*/
function set ($name, $value) {
$this->values[$name] = $value;
}


Über den Tellerrand

Web-Anwendungen mit PhpBeans

Mehrschichtige Anwendungen lassen sich nicht nur mit PhpBeans realisieren. Gerade Webservices haben in den letzten Jahren für Furore gesorgt, da es mit ihnen erstmals möglich war, Daten zwischen heterogenen Systemen auf standardisierte Art und Weise auszutauschen. Warum also ausgerechnet die PhpBeans verwenden? Sie haben zwei besondere Vorteile. Zum einen sind die Nachrichten, die über das Netz ausgetauscht werden, um den Faktor 2 bis 3 kleiner und somit auch schneller übertragen als bei den üblichen Webservice-Protokollen. Zum anderen ist ein Authentifizierungsmechanismus bereits im Standard enthalten und der Serverzugriff somit sicherer.


Fazit

Web-Anwendungen mit PhpBeans

Mit PhpBeans lassen sich einfach verteilte PHP-Anwendungen realisieren. Trotz der Tatsache, dass das Projekt nicht besonders bekannt ist und sich daher wohl auch nicht gerade rasant weiterentwickelt, stellt es doch eine stabile und schnelle Plattform bereit, die anderen Lösungen wie Webservices einiges an Geschwindigkeit und Funktionalität voraus hat. Benutzer des PHP-Frameworks Prado (www.xisc.com) wird die Verwendung von PhpBeans besonders einfach gemacht. Dort existieren Komponenten, mit denen PhpBeans-Server direkt angesprochen werden können.

Wie nahezu jeder Client-Server-Ansatz hat PhpBeans auch Nachteile. Zum einen wird es nur sehr zögerlich weiterentwickelt, zum anderen wird der Geschwindigkeitsvorteil gegenüber Webservices damit erkauft, dass als Gegenstelle nur ein PhpBeans-Server möglich ist. Soap, XML:RPC und andere sind hier flexibler und lassen auch heterogene Umgebungen zu.