One Size Fits All

Dynamisch generierte Web-Seiten zu erstellen gehört längst zum normalen Handwerk. Werkzeuge und Sprachen dafür stehen zur Verfügung. Das derzeit noch in der Version 3 verfügbare PHP bietet sich dabei für Anfänger wie Profis an - und PHP ist Open Source.

In Pocket speichern vorlesen Druckansicht
Lesezeit: 14 Min.
Von
  • Niels Pollem
Inhaltsverzeichnis

Rasmus Lerdorfs ursprünglich als PHP/FI (Personal Homepage Tools/Form Interpreter) bekanntes Web-Werkzeug hat sich in den vergangenen Jahren zu einer eigenständigen serverseitig eingebetteten Skriptsprache entwickelt. Als PHP (das als ‘PHP: Hypertext Preprocessor’ zu den rekursiven Akronymen zählt) ermöglicht es die schnelle und flexible Erstellung dynamischer Web-Seiten. Mit einer C-ähnlichen Syntax, Anleihen bei Perl und der integrierten Unterstützung vieler Datenbanksysteme ist PHP derzeit eine gute Wahl für Web-Entwickler - unabhängig von der Projektgröße. Die Zahl der Nutzer, zu denen derzeit so verschiedene wie die Apache-Gruppe, Neckermann, Opel, der Spiegel, die SPD und Suse zählen, erhöht sich beständig. Gerade ist Linux.com hinzugekommen.

PHPs Open-Source-Charakter zeigt sich besonders dadurch, daß das Werkzeug alle relevanten Plattformen unterstützt, frei verfügbar ist (GPL) und zudem eine aktive und hilfsbereite Entwickler- und Nutzergemeinde hat. Dank der vielen Informationen auf www.php.net ist effektives Arbeiten mit PHP schnell möglich, ein größerer Schulungsaufwand nicht notwendig.

PHP arbeitet mit Skripttags, die sich beliebig in Web-Seiten einstreuen lassen, beispielsweise: <p>Hallo <? print $name ?>. Ein etwas komplexeres Beispiel, das auf eine Datenbank zugreift und eine Tabelle erzeugt, zeigt Listing 1.

Mehr Infos

LISTING 1a

Abfragemaske für Bestellungen und Datenbankzugriff via MySQL und Ausgabe in HTML-Tabelle; Rückkopplung mit der Abfragemaske

<? require "header.html" ?>

<h1>Abfrage Ihrer Bestellungen</h1>

<form action="ausgabe.php3" method="POST">

<p>Kundennummer:
<input type="text" name="kn" value="<? print $kn ?>">

<p>Datensatznummer:
<input type="text" name="dn">

<p><input type="submit" value="Datenbank abfragen">

</form>

<? require "footer.html" ?>
Mehr Infos

LISTING 1b

<?
require "header.html";

$connect=@mysql_pconnect($host,$user,$passwd);

$query="select * from table where kn='$kn' and dn='$dn'";

$result=@mysql_db_query($database,$query,$connect);
?>

<table cellpadding=5 cellspacing=2 border=0>
<tr bgcolor="#66cc66"><th>Anzahl</th><th>Preis</th></tr>

<?
while ($row=mysql_fetch_array($result)){
printf("<tr bgcolor=\"#cc%scc\">",($i++%2?"ff":"cc"));
printf("<td>%s</td><td>%s</td></tr>",$row["anzahl"],$row["preis"]);
}
?>

</table>

<p>

Anderer <a href="eingabe.php3?kn=<? print rawurlencode($kn)
?>">Datensatz</a>.

<? require "footer.html" ?>

Die Einbettung der Skriptanteile hebt die Trennung zwischen statischen und dynamischen Elementen auf. Man kann mit PHP Skriptelemente in bisher statische Seiten einfügen, ohne diese vollständig restrukturieren oder gar in print-Statements verpacken zu müssen. Die PHP-Tags sind dabei durch <? … ?> beziehungsweise <?php … ?> gekennzeichnet (wobei letzteres XML-konform ist). Auch die Verwendung von <% … %> à la ASP (Active Server Pages) ist möglich; einige Web-Editoren erkennen nur diese Schreibweise problemlos. Durch diese Trennung kann der HTML-Anteil beziehungsweise dessen Layout weiterhin mit einem Editor bearbeitet und gegebenenfalls arbeitsteilig erstellt werden.

PHPs C-ähnliche Syntax bietet die gewohnten Operatoren, Typen und Konstrukte, von if() und for() bis while() und switch(). Benutzerdefinierte Funktionen verfügen über lokale Variablen; ihren Parametern lassen sich Defaultwerte zuweisen. Auch Klassen inklusive Vererbung sind vorgesehen (siehe Listing 2a). Nützlich ist die dynamische Benennung von Variablen und Funktionen. Sie ermöglicht etwa die Programmierung von Callback-Funktionen (Listing 2b). Um Speichermanagement braucht sich niemand kümmern. Das von einer interpretierten Sprache zu erwartende, von PHP gebotene Sicherheitsnetz entledigt den Programmierer der meisten derartigen Sorgen, so daß er sich auf seine eigentliche Aufgabe konzentrieren kann. Auch Anfänger haben kaum eine Chance, durch eigene Fehler den ganzen Web-Server mitzureißen.

Mehr Infos

LISTING 2a

Objekte: einfacher Warenkorb

<?
class warenkorb{
var $artikel;

function rein($bez,$anz) {
$this->artikel[$bez]+=$anz;
}

function raus($bez,$anz) {
if ($this->$artikel[$bez]>=$anz)
$this->artikel[$bez]-=$anz;
}

function liste($pre,$post="<br>") {
while (list($bez,$anz)=each($this->artikel))
printf("%s%s: %d%s",$pre,$bez,$anz,$post);
}
}

class mywarenkorb extends warenkorb {
var $identifikation;

function personalisieren($id) {
$this->$identifikation=$id;
}

function mywarenkorb() {
$this->rein("kostenloser Katalog",1);
}
}

$einkauf=new mywarenkorb;

$einkauf->personalisieren("Niels");

$einkauf->rein("Sonnencreme",1);
$einkauf->rein("Grillfleisch",10);
?>

<p>Einkauf fnr das Grillen am Werdersee:
<ul type="circle">

<?
$einkauf->liste("<li>","");
?>

</ul>
Mehr Infos

LISTING 2b

Dynamische Benennung: Aufruf von Funktionen

<?
function implizit() {
print "<p>Implizit.";
}

function explizit() {
print "<p>Explizit.";
}

function funktion($call="implizit") {
$call();
}

funktion();

funktion("explizit");
?>

Viele der zahlreichen Funktionsgruppen von PHP zielen explizit auf den Bereich der Web-Entwicklung ab. So findet man neben den gewohnten Funktionen zu Strings oder regulären Ausdrücken urlencode() und urldecode(), die Sonderzeichen in URLs schützen, genauso wie setcookie(), um einen Cookie zu setzen oder header(), um einen HTTP-Header zu erzeugen; URLs können genauso wie Dateien zum Lesen geöffnet werden. PHP bietet aber auch diverse systemnahe Funktionen (Listing 2c); der direkte Aufruf über system() ist ebenfalls möglich.

Mehr Infos

LISTING 2c

Systemnahe Funktionen: Arbeiten mit Sockets

<pre>
<?
$socket=fsockopen("whois.ripe.net",43,&$n,&$s);

fputs($socket,"heise.de\n");

while (!feof($socket))
print fgets($socket,512);

fclose($socket);
?>
</pre>

Eine Stärke von PHP sind die vielen unterstützten Datenbanksysteme, zu denen Informix, mSQL, MySQL, MS SQL, Oracle, PostgreSQL und Sybase gehören. Ein Zugriff über ODBC ist ebenfalls möglich, so daß zum Beispiel auch Adabas D und Microsofts Access hinzukommen. PHP ermöglicht persistente Datenbankverbindungen, was der Performance zugute kommt. Weitere Funktionsgruppen gibt es etwa zu XML (bindet James Clarks expat an), der dynamischen Erzeugung von PDF-Dateien (Adobes Portable Document Format inklusive FDF) und GIFs inklusive TrueType-Fonts (PDFlib, GDlib, Freetype), der HTTP-Authentifizierung sowie IMAP, SNMP und LDAP.

Zahlreiche Nutzer haben mittlerweile eigene Code-Fragmente für verschiedene Aufgaben (beispielsweise Diagrammarten auf Basis von Arrays und den GD-Funktionen oder das Durchführen beziehungsweise Auswerten von Umfragen) entwickelt und stellen sie anderen zur Verfügung.

PHP ist über ein C-API erweiterbar, wobei entsprechende Wrapper zur Ressourcenverwaltung bereitstehen, um Fehler in diesem Bereich zu vermeiden. Einzelne Module sind mittlerweile dynamisch ladbar. Für Provider interessant ist insbesondere der Safe-Mode, der unter anderem das Öffnen von Dateien einschränkt.

Performancevorteile ergeben sich dadurch, daß PHP als Servermodul zum Beispiel für den Apache kompilierbar ist. Dies geht derzeit zwar noch nicht unter Windows, aber die frei verfügbare (in einigen Linux-Distributionen vorkonfiguriert enthaltene) LAMP-Kombination aus Linux, Apache, MySQL und PHP [1] ist auch dort verfügbar und ermöglicht als WAMP eine plattformübergreifende Entwicklung. Alternativ stellt Cygwin unter Windows eine Unix-Umgebung bereit sowie, darauf aufsetzend, analog eine CAMP-Kombination. Servermodule für den Apache und weitere unter Windows gängige Web-Server (MS-IIS, NS-Enterprise und WebSite von O’Reilly) befinden sich derzeit in der Entwicklung.

Das LAMP-System ist leistungsstark und läuft stabil. Seine Fernwartbarkeit macht es universell einsetzbar. Es dient mittlerweile als Basis für verschiedene Web-basierte Produkte, unter anderem Phorum (Diskussionsforen), Midgard (Online-Publishing) und WebDev (Distributed Authoring auf der Basis von WebDav).

Hinsichtlich der Dokumentation und des Supports bleiben bei PHP kaum Wünsche offen. Die mehrfach gespiegelte PHP-Website stellt ein komfortables Manual zur Verfügung, in das Nutzer sogar dynamisch Kommentare und Beispiele einfügen können, und bietet auch sonst viele nützliche Informationen. Neben deren Offline-Fassungen sind mittlerweile mehrere Bücher zu PHP erschienen. Zudem gibt es mehrere Mailing-Listen zu PHP (auch eine deutsche) und zu einzelnen Themenbereichen (die im Heft abgebildete Tabelle ‘Online-Ressourcen’ finden sie auf der iX-Website), an denen sich auch die Entwickler beteiligen.

Websites, die PHP als Servermodul einsetzen - die stärker wachsende Zahl der Domains läßt auf den Einsatz durch Provider kleinerer und mittlerer Präsenzen schließen.

(Bild: Netcraft/PHP-Site)

Abbildung 1 zeigt die steigende Zahl der Websites, die PHP als Servermodul betreiben. Zunehmend bieten Provider PHP auch für kleinere und mittlere Präsenzen an -teilweise allerdings nur als CGI, was sich nicht in den Zahlen von Netcraft niederschlägt. Dort wird PHP aber aber auch so auf über 570 000 und damit rund zehn Prozent aller Websites verzeichnet. Der Server hosts.php.net zeigt auf der Basis einer detaillierten Datenbank, wo PHP angeboten wird.

Oft wird PHP Perl gegenübergestellt. Auf den ersten Blick ähneln sich die beiden ‘Kontrahenten’ durchaus: Beide kommen aus dem Unix-Umfeld, sind entsprechend flexibel (und natürlich Open Source), bieten ein Apache-Modul, können in Web-Seiten eingebettet werden und sind mittlerweile auch unter Windows verfügbar - wobei sich dieser Artikel ausdrücklich nicht damit befaßt, ob man einen Web-Server unter Windows betreiben sollte.

Perl ist dabei die im Gegensatz zu PHP allgemeinere Sprache, für die entsprechend vielfältige Module verfügbar sind. mod_perl bietet zudem ein Interface zur Apache-API, über das neue Servermodule ganz in Perl geschrieben werden können. Die entsprechende Kritik an PHP sticht insofern nicht, als die Entwickler nicht mit dem Anspruch einer allgemeinen Sprache angetreten sind. Das macht sich wiederum positiv in dem zusätzlichen Gewicht bemerkbar, das PHP nicht mit sich schleppen muß. Um es kurz zu machen: Die Liste der Vor- und Nachteile ist beliebig lang; jeder muß hier für sich entscheiden. PHP hat sich bisher noch jeder Aufgabe gewachsen gezeigt. Schlichtend oder einen Wechsel ermöglichend ist, daß sich die beiden Servermodule problemlos parallel betreiben lassen.

Neben PHP und Perl gibt es natürlich weitere Möglichkeiten wie ASP, ColdFusion oder VelociGen. Die meisten von ihnen sind jedoch entweder nicht für alle relevanten Plattformen zu haben, verfügen nur über einen unzureichenden Sprachumfang oder kosten einfach zuviel Geld, das man für PHP oder Perl nicht ausgeben muß.

Während die Kernentwickler auf PHP 4 hinarbeiten, haben andere in den letzten Monaten arbeitserleichternde Zusätze beigesteuert, darunter die PHP-BaseLib und die Fast-Template-Klasse. Wieder andere betreuen Websites wie PHPBuilder, auf denen sie Lösungen zu häufigen Problemen vorstellen.

Einige Klassen, die häufig wiederkehrende Aufgaben vereinfachen, enthält die BaseLib: DB_Sql für den einheitlichen Zugriff auf verschiedene Datenbanksysteme, Auth zur Authentifizierungsverwaltung, ein Cookie-basiertes Sessionmanagement, Cart für die Verwaltung eines virtuellen Einkaufswagens und Table zur vereinfachten Erzeugung von HTML-Tabellen auf der Basis von Arrays. Die Fast-Template-Klasse vereinfacht die Arbeit mit Templates für Web-Seiten und entkoppelt so die technische von der gestalterischen Wartung.

Den ersten Schritt zur nächsten Version machte der Parser: Zend wird in PHP 4, das im Herbst erwartet wird, den alten Kern ersetzen. Zend ist eine allgemein gehaltene Skriptsprachen-Engine, die Zeev Suraski und Andi Gutmans geschrieben haben. Sie soll auch als Grundlage anderer Sprachen dienen, etwa für die Stored Procedures von MySQL. Die Engine soll ebenfalls im Herbst abgeschlossen sein. Der Gewinn für PHP 4 besteht in der Leistungssteigerung, die Zend verspricht (siehe Benchmarks auf deren Website).

Angekündigt sind für Zend unter anderem ein Debugger und ein Vor-Compiler, der eine binäre und damit geschützte Weitergabe von Code ermöglichen würde. Dieser Teil der Zend-Entwicklung dürfte kommerziell erfolgen. Dies muß jedoch nicht beunruhigen: kleine und mittlere Nutzer benötigen diese Zusätze nicht, und große werden sie sich leisten können.

Die in PHP 4 geplanten Erweiterungen lassen sich in drei Gruppen aufteilen: Sprachkern, Funktionsklassen und Performance. Ähnlich dem Perl-Ressource-Zentrum CPAN ist zudem ein zentrales Repository für Module und Funktionen geplant.

Einige nützliche Elemente sollen den Sprachkern erweitern: foreach(), eine flexiblere dynamische Benennung, Output Buffering oder eine Garbage Collection (trotz kurzer Laufzeiten). An zusätzlichen Funktionsklassen sind solche für Imagemagick (Bildmanipulation on-the-fly), WDDX (Datenaustausch zwischen verschiedenen Skriptsprachen via XML), DAV, COM und CORBA vorgesehen. Im Blickpunkt steht jedoch die angestrebte Performancesteigerung: Zend wird hier einen wesentlichen Anteil haben. Hinzu kommen neben der Verbesserung dynamisch ladbarer Funktionsmodule auch Servermodule zum Beispiel für den Apache unter Windows, also WAMP und den MS-IIS.

NIELS POLLEM
studiert Informatik an der Universität Bremen und arbeitet dort im Bereich Digitale Medien und Netze des TZI.

[1] Michael Kunze; Laßt es leuchten; LAMP: Datenbankgestütztes Web-Publishing-System mit Freeware; c’t 12/98, S. 230

[2] Michael Kunze; Eisberg voraus; Freie Software zwischen Kommerz und Chaos; c’t 12/98, S. 88

Mehr Infos

iX-TRACT

  • PHP ist in der Version 3 eine ausgereifte Skriptsprache, die anders als Perl auf das Web konzentriert ist.
  • Alle gängigen Datenbanksysteme lassen sich über PHP in Web-Seiten ansprechen.
  • Der Interpreter läßt sich als Modul in den Apache-Web-Server integrieren und mit MySQL unter Linux im sogenannten LAMP-System nutzen.
Mehr Infos

Beispielsite

Linux.com ist als zentrale Anlaufstelle für an Linux interessierte Nutzer und Firmen konzipiert. Die Site bietet unter anderem News, Tuning, Support, Linux@Work und Verweise auf lokale Nutzergruppen.

Betrieben wird die Site auf zwei gekoppelten Web-Servern und einem dedizierten Datenbankserver. Die täglichen Zugriffszahlen liegen im Millionenbereich. Zum Einsatz kommt das erwähnte LAMP-System. Alle Seiten werden dynamisch erzeugt und greifen dabei auf die Datenbank zu - ‘lebender’ Beweis für die Leistungsfähigkeit der LAMP-Komponenten.