PHP/Tutorials/Einstieg/Zusammenspiel mit HTML

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

Informationen zu diesem Text

Lesedauer
10-15min
Schwierigkeitsgrad
einfach
Vorausgesetztes Wissen
Grundkenntnisse in
● HTML

Die Script-Sprache PHP bietet die Möglichkeit, Anfragen eines Browser 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[Bearbeiten]

Folgende Grafik veranschaulicht das Zusammenspiel von 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 ein Dokument abruft, muss der Server entscheiden, welches Modul für die Bearbeitung eines solchen Abrufs 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 mehr finden. Aus Sicht dieses Protokolls ist es völlig gleichgültig, ob ein vom Client gewünschtes Dokument auf dem Server fertig gespeichert ist oder ob es erst im Moment des Abrufs durch ein Programm wie PHP aus Bausteinen zusammengesetzt wird.

Der Begriff Dokument ist nicht mit HTML-Dokument gleich zu setzen. In der Terminologie von HTTP ist alles, was durch das Protokoll übertragen wird, ein Dokument. Das kann HTML sein, aber auch CSS, JavaScript, Bilder, PDF-Dateien oder Softwaredownloads.

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 durchgereicht.

Soll der Server PHP verarbeiten, stellt man für Dateien, deren Name auf .php endet, 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 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[Bearbeiten]

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. Wenn Sie mehr zur Geschichte von PHP erfahren wollen, folgen Sie bitte diesem Link zum PHP-Handbuch.

Es ist bis heute überhaupt kein Problem, auf die Steuerbefehle ganz zu verzichten. Jede HTML Datei ist automatisch eine gültige PHP-Datei. Ändert man die Endung einer .htm oder .html Datei in .php, kopiert der PHP-Interpreter einfach nur zum Browser.

Beispiel: 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[Bearbeiten]

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:

Beispiel: 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:

Beispiel: 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 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[Bearbeiten]

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.

Beispiel: 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[Bearbeiten]

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 Befehle 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.

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[Bearbeiten]