14.3 PHP
Auch wenn viele »Informatiker« bei der Frage nach ihren »Programmierkenntnissen« die Sprache HTML angeben, so hat die Hypertext Markup Language rein gar nichts mit Programmierung an sich zu tun. (X)HTML ist eine reine Seitenbeschreibungssprache.
Eine Seitenbeschreibungssprache wie HTML beschreibt nur das Aussehen und die Struktur, aber nicht das Verhalten von Dokumenten.
Mit anderen Worten: Man kann mit HTML zwar sagen, dass ein fettgedruckter Text neben einem Bild mit grüner Schrift auf blauem Untergrund erscheinen soll, jedoch muss man diesen Text bereits bei der Erstellung des Dokuments per Hand statisch eintragen.
Dynamischer Inhalt
Möchte man diesen Text dynamisch erstellen und beispielsweise die beim Aufruf jeweils aktuelle Uhrzeit anzeigen, dann kommen Skriptsprachen wie PHP ins Spiel. Dazu muss der Webserver selbstverständlich entsprechend konfiguriert sein, schließlich soll das nun dynamische Dokument zuerst durch einen Parser gejagt werden, der die Skriptbefehle auswertet und am Ende pures (X)HTML ausspuckt. Diese Ausgabe wird bei jedem Aufruf neu erzeugt, bevor sie schließlich an den Client geschickt wird.
14.3.1 (X)HTML
Bevor wir uns also den eigentlich Skriptsprachen widmen, möchten wir ein paar Worte über (X)HTML verlieren. An erster Stelle soll dabei die Frage stehen, was das X bei XHTML bedeutet und wo der Unterschied zu HTML liegt.
Die Geschichte von HTML
Dazu müssen wir uns kurz die Geschichte von HTML ansehen. Die Sprache wurde 1989 von Tim Berners-Lee und Robert Caillau entwickelt, um mit dem ebenfalls entwickelten HTTP-Protokoll ein verteiltes Informationssystem für ihre Arbeit am CERN Kernforschungsinstitut zu erleichtern. Damals wurde HTML in erster Linie zur Strukturierung von Textdaten gebraucht, Elemente für die Visualisierung wurden erst später hinzugefügt.
Diese Erweiterungen führten zu bekannten Problemen: Da die Spezifikationen zur Darstellung anfangs recht ungenau beziehungsweise sogar unvollständig waren, gab es Spielräume bei der Interpretation und der Darstellung von HTML-Seiten.
Die daraus resultierenden Unterschiede von Webseiten im Internet Explorer oder im Netscape Navigator führten so manchen Webdesigner bis an den Rand des Suizids.
XML
Später entwickelte man auf Basis des erfolgreichen HTML die Strukturierungssprache XML. Diese Sprache wurde regelrecht hochgejubelt, schließlich könne man mit ihr »alles machen«! Und das stimmt in gewissem Sinne auch:
XML definiert nur, wie ein Dokument strukturiert sein muss. Es wurden ganze Bücher über dieses Thema geschrieben, jedoch lässt sich das Wichtigste zu XML in wenigen Sätzen zusammenfassen:
Mit XML strukturiert man seine Texte in Tags und Attribute. Tags können Attribute enthalten und weitere Tags umschließen. Dazu muss jedem Start-Tag »<Tag>« ein schließendes Tag »</Tag>« folgen.
XHTML ist nun nichts anderes als XML-konformes HTML. Da XML selbst keine Aussage dazu macht, welche Tags beziehungsweise Attribute erlaubt sind, definiert man sogenannte Schemas. Und im passenden XHTML-Schema sind eben die für XHTML vorgesehenen Werte definiert.
HTML »programmieren«
Referenzen
Wie »programmiert« man nun eigentlich HTML? Für einen Einführungskurs eignet sich am besten die Online-Referenz http://de.selfhtml.org sowie natürlich auch die Referenz des World Wide Web Consortiums http://www.w3c.org.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd» <html> <head> <title>Text des Titels</title> </head> <body> <h2>Überschrift</h2> <p>Text im Absatz</p> </body> </html>
Listing 14.18 Beispiel für eine HTML-Datei
In diesem kleinen Beispiel ist zu erkennen, dass eine Webseite mit der Überschrift »Überschrift« und einem Absatz mit dem Text »Text im Absatz« erstellt wurde. Die Tags »h2« und »p« sind dabei intuitiv nach der Strukturierung benannt: heading bedeutet »Überschrift«, und paragraph ist das englische Wort für »Absatz«.
Einige Designrichtlinien
Heutzutage rückt mit XML und dem künftigen Standard XHTML 2.0 die eigentliche Aufgabe von HTML wieder mehr in den Vordergrund: das Strukturieren des Inhalts. Die Visualisierung sollte dagegen über CSS-Stylesheets vorgenommen werden.
Tabellen vs. divs
Für entsprechende Anpassungen eignen sich besonders die »<div>«-Tags, da diese kein festgeschriebenes Erscheinungsbild besitzen und so frei konfiguriert werden sollen. Vor allem sollte man von einer Layout-Gestaltung mittels Tabellen Abstand nehmen und auf eben diese divs zurückgreifen. Mit einer solchen Umsetzung des Layouts hat man in der Regel auch in exotischen Browsern kaum Darstellungsprobleme und trägt sogar zur Barrierefreiheit des Internets bei.
Einsteiger neigen des Weiteren auch dazu, auf einer »Homepage« alles unterbringen zu wollen, was sie können oder im Web finden. Bunte, blinkende, mit GIF-Grafiken überladene Webseiten sind die Folge. Weniger ist da meistens mehr.
Und Sie wollen doch nicht, dass Ihre Webseite aussieht, als wäre sie von einem unter Drogen gesetzten Zehnjährigen entworfen worden.
Jedenfalls gibt es im Netz viele gute Seiten – allen voran natürlich die vom W3C (www.w3c.org) --, auf denen man viel über Webdesign und mögliche Fehler lernen kann.
14.3.2 PHP-Support im Apache aktivieren
Modul laden
Bevor wir nun die ersten dynamischen Webseiten programmieren wollen, müssen wir den PHP-Support im Apache aktivieren. Dazu wird ein spezielles Modul benötigt, das in der Konfigurationsdatei auch geladen werden will:
# Modul laden LoadModule php4_module /usr/lib/apache/1.3/libphp4.so # Den Dateiendungen ihre MIME-Typen zuweisen AddType application/x-httpd-php .php4 AddType application/x-httpd-php .php AddType application/x-httpd-php-source .phps # Standardmäßig auch index.php3 bzw. index.php laden DirectoryIndex index.php3 index.php
Listing 14.19 PHP-Support in Apache 1.3.x
$ cat /etc/apache2/mods-enabled/php5.conf <IfModule mod_php5.c> AddType application/x-httpd-php .php .phtml .php3 AddType application/x-httpd-php-source .phps </IfModule> $ cat /etc/apache2/mods-enabled/php5.load LoadModule php5_module /usr/lib/apache2/modules/libphp5.so $ grep php /etc/apache2/mods-enabled/dir.conf DirectoryIndex index.html index.php index.xhtm
Listing 14.20 PHP-Support in Apache 2.x
Ebenfalls müssen die Dateiendungen den entsprechenden MIME-Typen zugeordnet sowie die Indexdateien definiert werden.
Die meisten Distributionen bieten jedoch spezielle Pakete an, die den PHP-Support automatisch zu Ihrem Webbrowser hinzufügen. So reicht beispielsweise unter Debian folgender Befehl aus:
# aptitude install php4 apache
oder:
# aptitude install php5 apache2
Listing 14.21 PHP-Apache unter Debian
Gentoo
Mit diesem Aufruf werden die Pakete »php4« und »apache« installiert und so konfiguriert, dass beides gleich in Kombination genutzt werden kann. Unter Gentoo sehen die Aufrufe zur Installation etwas anders aus:
# emerge
<apache-2
# USE="-*" emerge php mod_php
# ebuild /var/db/pkg/dev-php/mod_php-4/mod_php-4.ebuild
config
# nano /etc/conf.d/apache
"-D PHP4" zur Variable APACHE_OPTS hinzufügen
# rc-update add apache default
Listing 14.22 PHP-Apache unter Gentoo
Anschließend sollte der Apache noch mit /etc/init.d/apache start gestartet werden. Bei anderen Distributionen sehen die Aufrufe zum Installieren der Software natürlich entsprechend anders aus.
14.3.3 PHP lernen
Natürlich können wir in diesem Buch keine komplette Einführung in PHP geben; Galileo hat eigene Bücher über dieses Thema mit einem ähnlichen Umfang wie unser Linux-Buch. Einige zum Verständnis notwendige Grundlagen können wir hier jedoch bieten.
PHP ist eine in HTML eingebettete Skriptsprache mit Ähnlichkeiten zu C, Java und Perl. Mit PHP können dynamisch generierte Webseiten schnell entwickelt werden.
Wie kann man nun PHP nutzen? Betrachten wir dazu ein kleines Beispiel, das zum Ausprobieren auf unserem PHP-fähigen Apache einfach nur als .php-Datei unter dem DocumentRoot gespeichert werden muss.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01
Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd»
<html>
<head>
<title>PHP-Testseite</title>
</head>
<body>
<?php echo '<p>PHP-Text</p>'; ?>
</body>
</html>
Listing 14.23 Ein kleines Beispiel für PHP
Man kann gut erkennen, dass PHP wirklich in HTML eingebettet ist. Der echo-Befehl zur Ausgabe einer Zeichenkette – in unserem Fall ein <p>-Tag samt Text – muss dazu in eine speziellen Umgebung platziert werden. Bei der Anforderung der Webseite durch einen Webbrowser wird also der PHP-Parser den Text zwischen »<?php« und »?>« nehmen und als PHP-Code interpretieren. Anschließend wird er den HTML-Code generieren, der schließlich an den Browser geschickt wird.
Um nun etwas Dynamik in die Sache zu bringen, wollen wir kurz die Auswertung des folgenden HTML-Formulars betrachten:
… <form action="auswertung.php" method="post» <p>Name: <input type="text" name="name»</p> <p>Alter: <input type="text" name="age" /></p> <p><input type="submit" value="Abschicken" /></p> </form> …
Listing 14.24 Dynamik!
Formulare auswerten
Dieses Formular muss nicht in einer PHP-Datei stehen. Wichtig ist nur, dass das Ziel dieses Aufrufs ein PHP-Skript ist. Diesem Skript – wie hier der Datei auswertung.php – werden die Eingaben des Benutzers geschickt, die wie folgt abgerufen werden könnten:
… <p> Hallo <?php echo $_POST['name']; ?>! Sie sind <?php echo $_POST['age']; ?> Jahre alt. </p> …
Listing 14.25 Die Eingaben auslesen
Auf die entsprechenden Formulardaten kann über das Array _POST zugegriffen werden. Variablen werden in PHP durch ein vorangestelltes Dollarzeichen identifiziert und können per echo natürlich auch ausgegeben werden.
Selbstverständlich gibt es bei PHP die Möglichkeit von Schleifen, Funktionen oder Abfragen von Bedingungen. Aber für einen ersten Eindruck sollen diese Ausführungen hier erst einmal genügen. Für weitere Informationen sollten Sie die offizielle Webseite www.php.net aufsuchen, auf der Tutorials, eine Referenz und viele praktische Beispiele zu finden sind.
14.3.4 PHP und MySQL
Natürlich ist PHP auch der Punkt, an dem es an die Nutzung der Datenbank gehen kann. PHP bietet dabei sogar verschiedene APIs zum Zugriff auf eine Datenbank an. Ausführliche Dokumentationen und Hilfen hierzu gibt es wie immer auf php.net.
Wir wollen uns stattdessen kurz einen Anwendungsfall für das Zusammenspiel von PHP und MySQL ansehen:
phpmyadmin, ein Tool zur Administration einer MySQL-Datenbank über das Web.
PHPMyAdmin
MySQL-Webadministration
Für viele Administrationen ist der phpmyadmin (phpmyadmin.net) das Tool der Wahl, wenn es um die Administration einer MySQL-Datenbank geht. Ein übersichtliches Webinterface und der große Funktionsumfang machen es möglich:
Abbildung 14.1 PHPMyAdmin
Aber vor allem ist dieses Projekt ein wunderschöner Anwendungsfall, da alle LAMP-Aspekte verbunden werden.
Auch wenn man selbst keinen eigenen Webserver mit MySQL und PHP betreibt, kann man mit dem PHPMyAdmin in Berührung kommen, da viele Webhoster die Software installieren, um ihren Kunden Zugriff auf ihre Datenbanken anzubieten.