PHP/Tutorials/Einstieg/Zusammenspiel mit HTML

Aus SELFHTML-Wiki
< PHP‎ | Tutorials‎ | Einstieg
Wechseln zu: Navigation, Suche

Die Script-Sprache PHP bietet die Möglichkeit, Anfragen eines Browsers auf unterschiedlichste Art zu bedienen. PHP ist im Gegensatz zu HTML eine serverseitig interpretierte Skriptsprache, oder um es einfacher auszudrücken: Während HTML erst vom Client (also etwa vom Browser des Nutzers) ausgewertet wird, tut bei PHP der Server sein Werk.

Kommunikation zwischen Client und Server

Client und Server

Während der Client einen Browser installiert hat, der HTML-Dokumente und auch andere Medien anzeigen kann, laufen auf einem Server mehrere Module. Wenn der Client vom Server eine Ressource – z. B. HTML- oder PDF-Dokumente, Javasripte, Bilder, ... – anfordert, muss der Server entscheiden, welches Modul für die Bearbeitung der Anforderung zu verwenden ist und die gewünschten Daten liefert. Wie dieser Abruf genau stattfindet, wird vom HTTP-Protokoll festgelegt, über dessen Aufbau Sie im HTTP-Einsteigertutorial ausführliche Informationen finden. Aus Sicht dieses Protokolls ist es völlig gleichgültig, ob eine vom Client angeforderte Ressource auf dem Server fertig gespeichert ist oder ob es erst im Moment der Anforderung durch ein Programm wie PHP aus Bausteinen zusammengesetzt wird.

Eine häufige Entscheidungsregel, wie Ressourcen bereitzustellen sind, ist eine Namenskonvention für abgerufene Dateien. So werden beispielsweise Dateien, deren Name auf .htm oder .html endet, vom Server mit einem einfachen Kopiermodul behandelt, das den Dateiinhalt ohne weitere Verarbeitung an den Client durchreicht.

Soll der Server PHP verarbeiten, stellt man für Dateien mit der Endung .php den Server so ein, dass sie nicht einfach kopiert werden, sondern ein Programm aufzurufen ist: der PHP-Interpreter. Er liest die angefragte PHP-Datei und führt die Befehle aus, die darin stehen. Die Ausgabe, die aus diesen Befehlen entsteht, wird an den Browser gesendet. Es ist die Aufgabe des PHP-Programmierers, diese Ausgabe so zu gestalten, dass der Browser sie als Dokument akzeptiert. Und auch aus Sicht von PHP gilt: HTML ist eine Möglichkeit von vielen. PHP Befehle können in beliebige Textdateien eingebettet sein, und ein PHP-Script kann statt Text auch ein Bild, einen Software-Download oder beliebige andere Binärdateien ausliefern.

Das Programm in der PHP-Datei kann unterscheiden, ob ein einfacher Datenabruf gewünscht ist (ein GET-Request) oder ob der Browser Formulardaten sendet, die zu verarbeiten sind (ein POST-Request). Es kann auch die vom Browser gesendeten HTTP Header und Cookies interpretieren, sowie in der Antwort eigene Header setzen und Cookies senden.

PHP läuft dabei nur auf Anfrage. Erst wenn ein HTTP-Request vom Client erfolgt, wird es aktiv und wertet z. B. eine Formular-Übertragung aus, liest Daten aus einer Datenbank und stellt eine HTML-Seite zusammen, die dann als Antwort (Response) an den Client gesendet wird. Danach ist die PHP-Bearbeitung zu Ende.

Ursprünglich nur eine Template-Sprache

Der Name PHP ist eine Abkürzung für „PHP: Hypertext Preprocessor“. Es handelte sich dabei ursprünglich um ein einfaches Werkzeug, um in HTML Steuerbefehle einzustreuen, die zur Verarbeitung von HTML-Formularen dienen sollten. Die PHP-Datei bildete also eine Vorlage (engl. Template) für die eigentliche HTML-Seite, und bestand zum größten Teil aus HTML. Mehr zur Geschichte von PHP erfährt man im PHP-Handbuch.

Es ist überhaupt kein Problem, auf die Steuerbefehle ganz zu verzichten. Jede HTML-Datei ist automatisch eine gültige PHP-Datei. Ändert man die Endung einer .html Datei in .php, gibt der PHP-Interpreter einfach nur das unveränderte HTML zurück.

reiner HTML-Code in einer PHP-Datei
<article>
  <h1>Überschrift</h1>
  <p>Das ist ein Absatz</p>
</article>
In dieser PHP-Datei steht kein PHP-Programmcode, sondern ausschließlich HTML-Code. Das mag zwar nicht besonders sinnvoll sein, ist aber technisch problemlos möglich.

In einer PHP-Datei hat man nun die zusätzliche Möglichkeit, innerhalb des HTML-Codes weitere Inhalte einzufügen, die vom PHP Interpreter beim Seitenabruf ermittelt werden. Dafür verwendet man PHP-Tags, die dem PHP-Interpreter mitteilen, dass die folgenden Zeichen als Programmcode interpretiert und ausgeführt werden sollen, anstatt sie unverändert an den Browser auszugeben.

PHP im HTML-Code stellenweise nutzen

Möchte man beispielsweise mit Hilfe von PHP im HTML-Code das aktuelle Datum und die aktuelle Uhrzeit zum Zeitpunkt der Auslieferung der Seite einpassen, dann macht man sich folgende Schreibweise zunutze:

HTML-Code mit kleinen PHP-Ergänzungen
<p>Seite abgerufen am 
   <?php 
      echo ( date('d.m.Y \u\m H:i:s') );
   ?> 
Uhr</p>
Bei <?php und ?> handelt es sich um die "PHP-Tags". Sie bewirken, dass für den PHP Interpreter nicht mehr der HTML-Kontext gilt, in dem einfach kopiert wird, sondern der PHP Kontext, in dem PHP Befehle erkannt und verarbeitet werden. Das Beispiel führt im PHP Kontext die PHP Funktion echo aus. Diese Funktion schreibt die Werte, die ihr übergeben werden, in die Browserausgabe. In diesem Fall ist das der Rückgabewert der date-Funktion, die aktuelles Datum und Uhrzeit gemäß einer Schablone als Zeichenkette aufbereitet.

Zur echo Funktion sollte noch erwähnt werden, dass sie zwar wie eine Funktion aussieht, aber eigentlich ein eingebauter PHP Befehl ist. Die Klammern können deshalb weggelassen werden.

Beachten Sie: Genau genommen ist es nicht richtig, von HTML-Kontext zu sprechen. Richtiger wäre Dokument-Kontext, weil PHP zwar für HTML-Dokumente entwickelt wurde, darauf aber nicht beschränkt ist. Man kann PHP genauso gut in einem XML-Dokument oder einer einfachen Textdatei einsetzen. Es ist sogar in einer CSS- oder Javascript-Datei verwendbar. Wir wollen hier aber bei HTML-Dokumenten bleiben.

Möchte man nur kurz in den PHP Kontext schalten, um mit echo einen einzelnen Wert auszugeben, gibt es dafür eine verkürzte Schreibweise:

PHP verkürzt mit short echo tag
<p>Seite abgerufen am <?= date('d.m.Y \u\m H:i:s'); ?> Uhr</p>
Anstelle des Konstrukts <?php echo $argument; ?> kann auch <?= $argument; ?> notiert werden.

Die Verwendung des short echo tag <?= ?> war bis PHP 5.3 an die Aktivierung des short open tag gebunden (man kann dann kurz <? statt <?php schreiben). Da das short open tag zu Problemen mit der Prolog-Zeile führt, wenn man PHP in eine XML Datei einbetten möchte, wurde die Kopplung mit PHP Version 5.4 aufgehoben. Seitdem ist <?= immer verfügbar.

Empfehlung: Schalten Sie die Option short_open_tag aus (in der php.ini Datei oder auf einem Apache Webserver in der .htaccess Datei). Der Mehraufwand für <?php ist nicht relevant, und von den PHP Autoren wird seit PHP 7 generell von seiner Verwendung abgeraten.

HTML-Code als String-Argument

Man hat als PHP-Programmierer die freie Wahl, ob man HTML-Teile außerhalb des PHP Kontextes notiert, oder sie im PHP Kontext mittels echo ausgibt.

HTML-Code in String-Literalen
<?php
  echo '<p class="abruf">Seite abgerufen am ', date('d.m.Y \u\m H:i:s'), ' Uhr</p>';
?>
Das Schlüsselwort echo bekommt hier drei durch Kommata getrennte Argumente: eine Stück Text, den Rückgabewert von date und ein weiteres Stück Text. Nacheinander an den Browser ausgegeben wird daraus z.B: <p>Seite abgerufen am 17.05.2016 um 12:00:12 Uhr</p>'.

Der richtige Name für Textstücke, wie sie hier verwendet wurden, lautet String-Literal. Das englische Wort String ist hier mit Kette oder Abfolge zu übersetzen, und literal steht für „wörtlich“ oder „buchstabengetreu“. Ein String-Literal ist also eine Kette von Zeichen, die buchstabengetreu zu übernehmen ist.

Ein Nachteil dieser Schreibweise wird in unserem Wiki sofort deutlich: Für ein Tool, das PHP- und HTML-Sprachelemente farblich hervorhebt, ist das HTML in den PHP Strings nicht mehr als solches zu erkennen. Ebenso würde ein Werkzeug, das HTML auf inhaltliche Konsistenz prüft, nichts mehr tun können.

Ein weiterer Nachteil ist: Wenn die auszugebenden HTML-Elemente Attribute enthalten, muss man genau aufpassen, welche Anführungszeichen man verwendet.

Sie sollten, bevor Sie HTML mit echo ausgeben, immer überlegen, ob nicht ein Ausstieg aus dem PHP-Kontext in den HTML-Kontext die bessere Lösung ist. Die echo-Variante kann lesbarer sein, wenn viele Fragmente zusammenzusetzen sind, die mit PHP Logik ermittelt werden oder aus PHP Variablen zu lesen sind.

PHP als Programmiersprache

Wie in jeder Software-Entwicklung ist auch beim Erstellen von PHP-Projekten auf eine saubere Strukturierung zu achten. Eine Trennung in Bausteine für Browserkommunikation, Geschäftslogik und Datenhaltung führt zu einer besseren Verständlichkeit des Programms und hilft, Fehler zu vermeiden.

PHP bietet mit den Befehlen include und require die Möglichkeit, von einer PHP Datei aus andere PHP-Dateien nachzuladen. In diesen nachgeladenen Dateien können sich HTML Bausteine und PHP Funktionen befinden.

Hauptartikel: PHP/Tutorials/Templates

Es ist eine Forderung des PHP-Standards PSR-1, hier genau zu trennen zwischen PHP-Dateien mit Code-Sammlungen, die selbst nichts tun außer Funktionen bereitzustellen, und Arbeits-Scripten, die sich benötigte Code-Sammlungen oder HTML Vorlagen mittels include holen und zur Erzeugung der gewünschten Ausgaben benutzen.

In einfachen, kleinen Scripten ist nichts dagegen einzuwenden, dass Programmlogik und HTML in einer PHP Datei zu finden sind. Aber selbst dann sollte man auf eine Aufteilung in HTML und Code achten.

Weblinks