# PHP - dynamisch und interaktiv II

Aber für was ist das gut?
Ingenieur der Advanced Computing Systems Division von IBM 1968 zum Microchip

PHP wurde ursprünglich im Herbst 1994 von Rasmus Lerdorf entwickelt und bestand anfänglich aus einer Sammlung von Perl-Skripten, die es Lerdorf ermöglichten, Zugriffe auf Webseiten zu erfassen und auszuwerten. Die Abkürzung PHP steht für »Personal Home Page Tools«.

Als Rasmus Lerdorf jedoch mehr Funktionalität benötigte, entwickelte er Mitte 1995 den ersten Parser und nannte das Paket PHP/FI Version 2. FI ist die Abkürzung für »Form Interpreter«. Bereits diese Version verfügte über große Ähnlichkeiten mit PHP, wie es heute verwendet wird. Es existierten bereits Variablen, Formularvariablen wurden automatisch interpretiert (FI = engl. form interpreter), und die Version beherrschte eine in HTML eingebettete Syntax. Zwar wies die Syntax große Affinitäten mit Perl auf, sie war jedoch sehr viel einfacher strukturiert.

Bis 1997 erfuhr PHP/FI immer wieder Verbesserungen und Änderungen und wurde mittlerweile auf ca. 50.000 Servern eingesetzt (ca. 1  % Marktanteil). Zu diesem Zeitpunkt war es allerdings noch immer ein Ein-Mann-Projekt.

Dies änderte sich 1997, als Zeev Suraski und Andi Gutmans den Parser vollständig neu programmierten, da ihnen PHP/FI zu schwach für die Entwicklung ihrer eigenen E-Commerce-Applikationen war. Sie einigten sich mit Lerdorf, und der neue Parser wurde als PHP 3.0 – nach 9 Monaten Testphase – Mitte 1998 freigegeben. Ende 1998 fand sich PHP 3.0 auf ca. 10  % der weltweiten Webserver.

Im Mai 2000 wurde dann PHP 4.0 freigegeben, das auf der neuen Scripting-Engine Zend (gebildet aus den Vornamen Zeev und Andi) basierte. Viele Erweiterungen fanden Einzug in die neue Version, z. B. eine stark verbesserte Leistung, HTTP-Sessions und neue Sprachkonstrukte. Diese Verbesserungen wurden entsprechend honoriert, was dazu führte, dass auf ca. 20  % der Domains PHP installiert wurde und ca. 100.000 Entwickler mit PHP arbeiteten.

Zum Zeitpunkt der Drucklegung dieses Buches liegt PHP in der finalen Version 4.3.8 und 5.0.2 vor. Mehr Informationen zu PHP 5 erhalten Sie in Kapitel 48, PHP 5 – Was ist neu?

# Das erste PHP-Script

PHP funktioniert ähnlich wie Perl, jedoch mit einem gravierenden Unterschied: PHP kann, ähnlich wie JavaScript, in HTML-Dokumente eingebettet werden. Die Einbettung ist jedoch nicht zwingend erforderlich. PHP kann genauso gut verwendet werden, um HTML-Code zu erzeugen.

Bei beiden Varianten – Einbettung in den Code und das Erzeugen des Codes – werden die Start- und Ende-Tags für die Scripts gleich verwendet. PHP-Quellcode wird immer zwischen den Tags

<?php

und

?>

notiert, egal, ob eine Verwendung innerhalb eines HTML-Dokuments oder als eigenständiges Script erfolgt.

<html>
  <head>
    <title>Listing 1.1</title>
  </head>
  <body>
    <?php
      echo "Hallo WorldWideWeb!";
    ?>
  </body>
</html>

Listing 1.1: Erstes PHP-Script

Das PHP-Script aus Listing 1.1 ist ein Beispiel für PHP-Code, der in ein HTML-Dokument eingebettet wurde. Kopieren Sie dieses Script in eine neue Datei, und speichern Sie es im Dokumenten-Verzeichnis Ihres Webservers ab.

Beachten Sie, dass Sie als Dateiendung .php wählen müssen, auch wenn das Script äußerlich einem HTML-Dokument gleicht. In einigen Fällen kann es auch sein, dass die Endung der Datei .php3 oder .php4 lauten muss. Dies hängt von der Webserver-Konfiguration ab. Häufig kommt auch die Endung .phtml oder .phtm zum Einsatz.

Den Grund dafür werde ich Ihnen im nachfolgenden Kapitel 40, Variablen und Operatoren, noch genauer erläutern. Zurück zum Listing 1.1. Alles, was außerhalb des Tag-Paares <?php und ?> notiert wurde, wird als normaler HTML-Code interpretiert und ganz normal im Browser ausgegeben. Alles, was innerhalb des PHP-Tag-Paares notiert wurde, wird als PHP-Code interpretiert und entsprechend vom PHP-Interpreter verarbeitet. Die Anweisung

echo "Hallo WorldWideWeb!";

weist den Interpreter an, die Ausgabe Hallo WorldWideWeb! zu erzeugen. Der Befehl echo erzeugt also eine Ausgabe. Nach echo kann entweder eine feste Zeichenkette (wird in doppelten oder einfachen Anführungsstrichen notiert) oder eine Variable folgen. Anschließend wird die vollständige Anweisung mit einem Strichpunkt bzw. Semikolon abgeschlossen (;).

Rufen Sie das Listing 1.1 nun in Ihrem Browser auf. Die Ausgabe des Scripts sollte folgendermaßen aussehen:

Hallo WorldWideWeb!

Herzlichen Glückwunsch, dies war Ihr erstes PHP-Script.

# PHP und die Dateiendungen

Was hat es aber mit der Endung .php auf sich? Genauso wie die Endungen .htm oder .html eine Datei als HTML-Dokument ausweisen, definiert die Endung .php eine Datei als PHP-Script. Wenn nun PHP-Code in einem HTML-Dokument eingebettet wurde, muss dem Webserver klar gemacht werden, dass innerhalb dieses Dokuments spezielle Anweisungen enthalten sind, die vor der Übertragung der Datei an den Browser interpretiert werden müssen. Andernfalls würde der PHP-Code einfach mit dem Rest an den Browser gesendet werden. Damit kann der Benutzer freilich nicht viel anfangen.

Damit der Server nun aber den richtigen Interpreter wählt, müssen Sie die Endung .php verwenden. In der Regel ist diese Dateiendung mit dem PHP-Interpreter verknüpft, der sich dann um die Ausführung des PHP-Codes und die anschließende Ausgabe im Browser kümmert. Der Interpreter kann nun anhand der PHP-Tags erkennen, ob es sich um HTML-Code oder um PHP-Code handelt.

Im Fall des Listing 1.1 findet er zu Beginn lediglich HTML-Code und sendet diesen ohne Umwege an den Browser. Erst wenn er auf das Tag <?php stößt, beginnt seine eigentliche Aufgabe. Den nachfolgenden Code interpretiert er nun als PHP-Code und führt die Anweisungen entsprechend aus; und zwar so lange, bis er auf das Tag ?> stößt. Alles, was danach folgt, wird wieder als HTML-Code bewertet und direkt zum Browser gesendet.

Dies bedeutet jedoch nicht, dass das PHP-Tag-Paar nur einmal in einer Datei verwendet werden darf. Ein Beispiel:

<html>
  <head>
    <title>Listing 1.2</title>
  </head>
  <body>
    <?php
      echo "Hallo WorldWideWeb!";
    ?>
    <?php
      echo "</body></html>";
    ?>

Listing 1.2: Mehrere PHP-Tag-Paare in einem Script

Der Unterschied zum Listing 1.1 liegt im zweiten PHP-Tag-Paar. Anstatt einfach den restlichen HTML-Code im Browser auszugeben, erfolgt dies mit der echo-Anweisung. Das Ergebnis beider Listings (sowohl Listing 1.1 als auch Listing 1.2) ist das gleiche, wobei das Listing 1.2 eher unsinnig ist.

# PHP in eigenen Dateien

Wie bereits erwähnt wurde, kann ein PHP-Script auch lediglich aus PHP-Code bestehen. Der HTML-Code muss dann aber mit der echo-Anweisung ausgegeben werden.

<?php
  echo "<html>";
  echo "<head>";
  echo "<title>Listing 1.3</title>";
  echo "</head>";
  echo "<body>";
  echo "Hallo WorldWideWeb!";
  echo "</body>";
  echo "</html>";
?>

Listing 1.3: PHP-Script, das ausschließlich PHP-Code enthält

Anders als Perl sendet PHP automatisch den korrekten MIME-Typ an den Browser, also text/html. Sie müssen diesen Header nur dann ausgeben, wenn die nachfolgenden Daten nicht zu einem HTML-Dokument, sondern zu einer Grafik oder Ähnlichem gehören.

In Listing 1.3 wird das gesamte HTML-Dokument mit PHP ausgegeben. Auch bei diesem Beispiel fehlt der praktische Nutzen. Es verdeutlicht aber, dass auch in einem solchen PHP-Script das PHP-Tag-Paar notiert werden muss, da der Interpreter sonst den reinen Quelltext an den Browser sendet.

Würden Sie die Tags <?php und ?> aus dem Listing 1.3 entfernen, sähe die Ausgabe im Browser folgendermaßen aus:

echo ""; echo ""; echo ""; echo ""; echo "";
echo "Hallo WorldWideWeb!"; echo ""; echo "";

# Quellstrukturierung und Kommentare

Auch in PHP ist eine vernünftige Quellstrukturierung und -kommentierung äußerst wichtig. Der Grund dafür dürfte mittlerweile hinlänglich bekannt sein.

Kommentieren können Sie in PHP auf drei Arten, entweder einzeilig oder mehrzeilig. Für einzeilige Kommentare notieren Sie einfach zwei Schrägstriche //. Alles was nach diesen beiden Schrägstrichen bis zum Zeilenende folgt, wird dann als Kommentar interpretiert und vom PHP-Interpreter ignoriert. Anstelle der Schrägstriche können Sie aber auch das Raute-Zeichen # verwenden.

Für mehrzeilige Kommentare müssen Sie /* und */ verwenden. Dabei kennzeichnet /* den Beginn eines mehrzeiligen Kommentars und */ das Ende des Kommentars.

echo "Hallo WordWideWeb!"; // ein einzeiliger Kommentar  
echo "Hallo Welt!";        /* Mehrzeiliger  
                              Kommentar */  
echo "Hallo Alle!";        # ebenfalls einzeiliger Kommentar

# Textausgabe

In vielen Fällen ist die Ausgabe von Text mit der echo-Anweisung ungenügend, gerade in Bezug auf Zeilenumbrüche. Zwar können Sie einen optischen Zeilenumbruch im Browser mit dem Element br bewirken, wenn Sie aber Text ausgeben möchten, der mit dem pre-Element formatiert werden soll, hat das br-Element keinerlei Auswirkungen.

Dafür benötigen Sie das Steuerzeichen \n. Dies erzeugt im Quelltext des HTML-Dokuments einen Zeilenumbruch (n = engl. new line = dt. neue Zeile). An welcher Stelle Sie das Steuerzeichen notieren, ist egal.

echo "Hallo Welt!\n";

Die Anweisung erzeugt einen im Browser nicht sichtbaren Zeilenumbruch nach der Zeichenkette Hallo Welt!.

echo "<pre>Hallo \n Welt!</pre>";

Diese Anweisung hingegen erzeugt sowohl im Quelltext als auch im Browser einen sichtbaren Zeilenumbruch.

Analog zur echo-Anweisung können Sie auch die print-Anweisung verwenden. Sowohl die Syntax als auch die Wirkungsweise beider Anweisungen sind gleich. Die Anweisung print kommt noch aus den Anfangszeiten von PHP, woran auch die Abstammung von Perl deutlich wird.

echo "Hallo Welt!<br>";  
print "Hallo Welt!<br>";

Die Ausgabe lautet:

Hallo Welt!
Hallo Welt!

# Formatierte Textausgabe

Anders sieht es bei der Funktion printf aus. Sie ist stark an die C-Syntax1 angelehnt. Mit dieser Funktion ist es möglich, Daten für die Ausgabe speziell zu formatieren. Vor allem bei der Ausgabe von Zahlenwerten ist dies hilfreich.

Dabei wird die Ausgabe mit Hilfe von Platzhaltern gesteuert.

int printf(string format [, mixed args…])

Die Formatierungszeichenkette mit den Platzhaltern wird als erster Parameter an die Funktion übergeben, und anschließend folgen die einzelnen Daten. Die Formatierung kann dabei sowohl normalen Text als auch die Platzhalter enthalten.

Platzhalter Erklärung
%b Binäre Darstellung von Ganzzahlen
%c Darstellung einer Ganzzahl als ASCII-Zeichen
%d Darstellung einer Ganzzahl als Dezimalzahl
%e Fließkommazahl in Exponentialdarstellung
%f Fließkommadarstellung
%g Entweder %e oder %f, je nachdem, was kürzer ist
%o Darstellung einer Ganzzahl als Oktalzahl
%s Darstellung als Zeichenkette
%x, %X Darstellung einer Ganzzahl in Hexadezimaldarstellung, entweder in Kleinbuchstaben (%x) oder Großbuchstaben (%X)

Tabelle 1.1: Platzhalter zur Formatierung mit der Funktion printf

Hier sehen Sie ein Beispiel für die unterschiedlichen Ausgabeformatierungen:

<?php
  printf("Binär: %b<br>",167);
  printf("ASCII: %c<br>",167);
  printf("Dezimal: %d<br>",167);
  printf("Exponential: %e<br>",167);
  printf("Fließkomma: %.2f<br>",167);
  printf("Oktal: %o<br>",167);
  printf("Zeichenkette: %s<br>",167);
  printf("Hexadezimal: %x<br>",167);
  printf("Hexadezimal: %X<br>",167);
?>

Listing 1.4: Formatierte Ausgabe von Daten

Im Browser erzeugt das Listing 1.4 die folgende Ausgabe:

Binär: 10100111
ASCII: §
Dezimal: 167
Exponential: 1.67000
Fließkomma: 167.00
Oktal: 247
Zeichenkette: 167
Hexadezimal: a7
Hexadezimal: A7

# Alternative PHP-Tags

Neben der Verwendung der Tags <?php und ?> können Sie noch weitere Schreibweisen verwenden.

Bei der Kurzform werden die Tags <? und ?> verwendet.

<? echo "Hallo Welt!"; ?>

Die Langform verwendet das HTML-Element script zur Einbindung von Scripts.

<script language="php">  
  echo "Hallo Welt!";  
</script>

Bei der ASP-Form werden die Tags <% und %> verwendet, die normalerweise bei Active Server Pages Anwendung finden.

<% echo "Hallo Welt!"; %>

Sowohl die Kurzform als auch die ASP-Form müssen nicht mit jeder PHP-Installation funktionieren, da dies nur Optionen sind, die in der Datei php.ini unter Umständen aktiviert werden müssen. Bei den meisten Providern haben Sie jedoch keinen Zugriff auf diese Datei. Aus diesem Grund sollten Sie die bisher verwendete Form <?php ... ?> benutzen.

# Zusammenfassung

  • PHP-Code kann sowohl in HTML eingebettet werden als auch in eigenen Dateien notiert werden.
  • Generell müssen Sie PHP-Tags verwenden, innerhalb derer der PHP-Code notiert wird. Die gängigste Variante ist <?php ... ?>.
  • Ausgaben können mit den Anweisungen echo oder print oder mit der Funktion printf erfolgen.
  • Einzeilige Kommentare werden durch // eingeleitet, und mehrzeilige Kommentare werden von /* und */ umgeben.
  • Die Endung eines PHP-Scripts sollte .php lauten.

# Fragen und Übungen

  1. Worin besteht der Unterschied zwischen der Anweisung echo und der Funktion printf für die Ausgabe im Browser?
  2. Mit welchem Steuerzeichen können Sie im HTML-Quelltext einen Zeilenumbruch erzeugen?
  3. Schreiben Sie ein PHP-Script, das ein vollständiges HTML-Dokument erzeugt und zusätzlich eine Überschrift der 1. Ordnung mit dem Text »Dynamische Webseiten mit PHP« ausgibt. Strukturieren Sie den HTML-Quelltext mit Zeilenumbrüchen.