General Repository for Database Applications
GERDA

von Lukas Ertl (Ausgabe 01/3, Oktober 2001)

 

Schon seit längerem haben Institute und Dienststellen der Universität Wien die Möglichkeit, auf dem Webserver WWW.UNIVIE.AC.AT statische HTML-Seiten abzulegen und mittels Perl auf eine Oracle-Datenbank zuzugreifen, um auch datenbankgestützte, dynamisch generierte Seiten zu veröffentlichen (siehe Artikel Ein neuer Webserver für die Uni Wien). In letzter Zeit häuften sich aber die Nachfragen nach PHP und MySQL, zwei Open-Source-Produkten zur Erstellung dynamischer HTML-Seiten, die sich zunehmender Popularität erfreuen.

Deshalb hat sich der Zentrale Informatikdienst entschlossen, einen weiteren Webserver zu betreiben: Am Server GERDA.UNIVIE.AC.AT, dem General Repository for Database Applications, steht nun die Plattform PHP/MySQL (alternativ auch PostgreSQL) für spezielle Projekte von Instituten bzw. für vorgefertigte Applikationen, die auf dieser Software basieren, zur Verfügung.

Es ist allerdings nicht geplant, daß GERDA.UNIVIE.AC.AT den Server WWW.UNIVIE.AC.AT als "Heimat" für Instituts-Homepages ablösen soll: Der Zugriff mittels Perl/CGI auf die Oracle-Datenbank ist weiterhin nur auf WWW.UNIVIE.AC.AT möglich. Ebenso ist derzeit nicht vorgesehen, PHP auch für private Homepages anzubieten.

Am Server GERDA.UNIVIE.AC.AT ist derzeit folgende Software verfügbar:

  • Betriebssystem FreeBSD 4.3
  • Apache 1.3.20
  • PHP 4.0.6 (mit MySQL- und PostgreSQL-Unterstützung)
  • MySQL 3.23.38
  • PostgreSQL 7.1.3

PHP

PHP (ein rekursives Akronym, das für PHP: Hypertext Preprocessor steht) entwickelte sich in den letzten Jahren zu einer der beliebtesten Programmiersprachen im Web - wohl auch im Sog der zunehmenden Akzeptanz des freien Betriebssystems Linux, da die Kombination PHP und Linux sehr häufig anzutreffen ist. Eine PHP-Seite ist im Grunde genommen eine "normale" HTML-Seite, die zusätzlich zu den HTML-Tags auch noch die gewünschten PHP-Anweisungen enthält. Der Webserver bearbeitet diese Anweisungen (Variablenzuweisungen, Funktionen, Schleifen, Datenbankaufrufe usw.) und schickt das Resultat an den Browser.

PHP nimmt Anleihen von Perl, C, Shell-Scripting und diversen anderen Programmiersprachen; deshalb sollte es jemandem, der bereits Erfahrungen mit diesen Sprachen gesammelt hat, nicht besonders schwerfallen, auch PHP-Seiten zu schreiben.

Ein einfache PHP-Seite sieht in etwa so aus:

<HTML>
<HEAD>
<TITLE>Hallo, Besucher!</TITLE>
</HEAD>
<BODY>
Hallo, Besucher von <? echo $REMOTE_ADDR; ?>.
</BODY>
</HTML>

Ruft nun ein Webbrowser eine Seite dieses Inhalts ab, erhält man den (zugegebenermaßen nicht sehr aufregenden) Text

Hallo, Besucher von 131.130.2.177.

wobei die IP-Adresse des jeweiligen Browsers angezeigt wird. Erkennbar ist jedenfalls das grundsätzliche Aussehen von PHP-Seiten: die bekannten HTML-Tags und die Anweisungen in den (anfangs etwas sonderbar wirkenden) PHP-Tags <? ... ?>. Die im Beispiel verwendete, global definierte Variable $REMOTE_ADDR enthält die IP-Adresse, von der die Anfrage kam. Selbstverständlich können auch mehrere PHP-Anweisungen innerhalb eines <? ... ?>-Blocks stehen. Eine simple Abfrage, die den verwendeten Browser überprüft, könnte etwa so aussehen (der Übersichtlichkeit halber wurden die HTML-Tags weggelassen):

...
<?
if (strstr($HTTP_USER_AGENT, "MSIE")) {
echo "Sie verwenden einen Browser von Microsoft.";
} else {
echo "Sie verwenden keinen Browser von Microsoft.";
}
?>
...

Besonders beliebt wurde PHP, weil sich damit die Parameterübergabe und die Auswertung von HTML-Formulardaten sehr komfortabel gestalten. Die Werte eines HTML-Formulars sind in der davon aufgerufenen PHP-Seite einfach in Variablen verfügbar, die den gleichen Namen haben wie die jeweiligen Eingabefelder. Das folgende kleine Beispiel soll das etwas verdeutlichen:

...
<? if (!$vorname) { ?>
<FORM method="post">
Bitte geben Sie Ihren Vornamen ein:
<INPUT type="text" name="vorname">
<INPUT type="submit" value="Senden">
</FORM>
<? } else { ?>
Hallo, <? echo $vorname; ?>.
<? } ?>
...

Wird diese Seite ohne irgendwelche Parameter aufgerufen, erhält der Besucher die Aufforderung, seinen Vornamen einzugeben, sowie ein entsprechendes Textfeld namens vorname. Gibt er nun seinen Vornamen (um genauer zu sein: irgendeinen Text) in das Textfeld ein und klickt auf Senden, wird die gleiche Seite wieder aufgerufen. Allerdings ist nun die Variable $vorname mit dem Wert aus dem Textfeld gefüllt und kann verwendet werden; das Formular wird nicht mehr angezeigt. Ebenfalls ersichtlich ist in diesem Beispiel, wie man mit Hilfe von If-Else-Abfragen verschiedene Blöcke einer Seite anzeigen kann.

Wenn nun vom Webserver eine solche Seite angefordert wird, erkennt er - falls er richtig konfiguriert ist - an der Datei-Endung (meist .php), daß es sich um eine PHP-Datei handelt, und übergibt dem PHP-Modul, das in den Webserver eingebunden ist, diese Seite zur Bearbeitung. Das Modul durchsucht die Seite, führt die in den <? ... ?>-Tags stehenden Anweisungen aus und schickt die resultierende Seite an den Browser zurück, wobei es für den Browser so aussieht, als wäre eine ganz normale HTML-Seite angefordert worden: Die Anweisungen innerhalb der PHP-Tags <? ... ?> bleiben für den Browser bzw. den Benutzer unsichtbar, abgesehen von den Daten, die mittels echo oder gleichwertigen Funktionen ausgegeben wurden. Bei PHP handelt es sich demnach um eine klassische server side scripting language, also eine Scriptsprache, die auf dem Server interpretiert und ausgeführt wird (im Gegensatz zu client side scripting languages wie etwa JavaScript, die vom Browser ausgeführt werden).

Obwohl mit PHP alleine bereits viele Aufgaben erledigt werden können, kommen seine wahren Stärken erst im Zusammenspiel mit SQL-Datenbanken zum Vorschein: Diese Kombination ermöglicht es, Diskussionsforen, Gästebücher, Online-Shops usw. zu realisieren.

SQL-Datenbanken

Am Server GERDA.UNIVIE.AC.AT wurden zwei Datenbanksysteme installiert, auf die die Benutzer mittels PHP zugreifen können: MySQL und PostgreSQL. MySQL ist die Datenbank, die wohl am häufigsten in Kombination mit PHP anzutreffen ist. Obwohl ihr einige Features einer "klassischen" SQL-Datenbank fehlen (Transaktionen, referenzielle Integrität, Triggers u.a.), hat ihr der Ruf, besonders schnell und einfach zu bedienen zu sein, viele Fans eingebracht. Alternativ zu MySQL kann auch PostgreSQL verwendet werden - wie MySQL eine Open-Source-Datenbank, die aber auch mit Transaktionen, Triggers, Foreign Keys usw. umgehen kann.

Welche Datenbank verwendet werden soll, hängt meistens vom Einsatzzweck und nicht zuletzt von der persönlichen Vorliebe des jeweiligen Entwicklers ab. PostgreSQL skaliert sehr gut und bietet ein hohes Maß von Datenintegrität, das man aber oft mit etwas langsameren Reaktionszeiten bezahlt. MySQL bietet einen phänomenalen raw speed, überläßt aber die Verantwortung, die Datenintegrität sicherzustellen, der jeweiligen Programmiersprache bzw. dem Programmierer.

Kontakt

Nähere Informationen zu diesem Server erhalten Sie im WWW unter http://gerda.univie.ac.at/ sowie unter der eMail-Adresse GERDA.ZID@UNIVIE.AC.AT.

Links