PHP/Tutorials/Zusammenhang mit HTML

Aus SELFHTML-Wiki
Wechseln zu: Navigation, Suche

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. Dabei kann PHP beliebige Dateitypen generieren und an den Browser ausliefern. Dieser Artikel geht zunächst darauf ein, wie HTML-Dokumente mit PHP ausgeliefert werden.

Inhaltsverzeichnis

[Bearbeiten] Ursprünglich nur eine Template-Sprache

Da PHP historisch zunächst "nur" eine Template-Sprache war, ist es bis heute möglich, HTML-Dateien so umzubenennen, dass sie nun die Endung .php anstatt .htm oder .html haben.

Beispiel: reiner HTML-Code in einer PHP-Datei
<table>
  <tr>
    <td>Inhalt</td>
  </tr>
</table>
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.

Der Unterschied in der Dateiendung ist deswegen von Bedeutung, da in den üblichen Konfigurationen der Webserver eine solche Datei vom PHP-Parser daraufhin geprüft wird, ob darin auszuführender PHP-Code enthalten ist. Dieser Code wird nach dem Parsen nicht an den Browser ausgeliefert.

In einer Datei, deren Name auf .htm oder .html endet, würde dieser PHP-Code nicht geparst, sondern unverändert an den Browser ausgegeben. Dort stört er in aller Regel nicht, da die Syntax im HTML-Kontext als Kommentar gedeutet wird, der Browser also diese Abschnitte ignoriert.

Will man nun innerhalb des HTML-Codes dynamische Inhalte einfügen, so kann man hierfür "PHP-Tags" verwenden, die dem PHP-Parser mitteilen, das die folgenden Zeichen als Programmcode interpretiert und ausgeführt werden sollen, anstatt sie unverändert an den Browser auszugeben.

[Bearbeiten] Den Parser im HTML-Code stellenweise nutzen

Damit PHP im HTML-Code das aktuelle Datum und die aktuelle Uhrzeit zum Zeitpunkt der Auslieferung der Seite einpassen kann, 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>
Im HTML-Code wird durch PHP-Tags (<?php und ?>) kurzzeitig der Kontext der PHP-Sprache eingeschaltet, damit dort notierte Programmlogik ausgeführt werden kann. Das Sprachkonstrukt echo (es handelt sich dabei nicht um eine Funktion, daher sind keine runden Klammern um Argumente notwendig) veranlasst, dass danach notierte Argumente an den Browser ausgegeben werden, in diesem Fall der Rückgabewert der date-Funktion.

Es ist bei passender Serverkonfiguration (short_open_tag) bzw. seit PHP-Version 5.4 unabhängig davon auch möglich, eine verkürzte Schreibweise zu nutzen:

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

Dieser Artikel ignoriert im Folgenden eine solche Kurzschreibweise, um von short_open_tag und der verwendeten PHP-Version (aktuell ist Version 7) unabhängig und abwärtskompatibel zu sein. In sehr speziellen Fällen könnte es unter Umständen im Zusammenhang mit einem XML-Prolog zu Störungen kommen, da dieser mit der Zeichenfolge <?xml version="1.0"?> notiert wird und ebenso die Zeichenfolge <? nutzt. Mittlerweile sollten solche Störungen aber kaum mehr der Rede wert sein.

[Bearbeiten] HTML-Code als String-Argument

Obiges Beispiel geht auch umgekehrt, indem man den HTML-Code als String innerhalb der Script-Sprache notiert:

Beispiel: HTML-Code in String-Literalen
<?php
  echo '<p>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, ein String-Literal, den Rückgabewert von date und ein weiteres String-Literal. Nacheinander an den Browser ausgegeben wird daraus z.B: <p>Seite abgerufen am 17.05.2016 um 12:00:12 Uhr</p>'.

In PHP ist es - anders als in JavaScript oder HTML - nicht äquivalent, einfache oder doppelte Anführungszeichen zu verwenden. String-Literale mit doppelten Anführungszeichen werden auf Variablennamen geprüft und diese gegebenenfalls ersetzt:

Beispiel: einfache und doppelte Anführungszeichen bei String-Literalen
<?php
  $now = date('d.m.Y \u\m H:i:s');
  echo '<p>Seite abgerufen am $now Uhr</p>';
  echo "<p>Seite abgerufen am $now Uhr</p>";
?>
Der Rückgabewert der date-Funktion wird in der Variable $now gespeichert. Die erste echo-Anweisung ergibt die Ausgabe <p>Seite abgerufen am $now Uhr</p>, da einfache Anführungszeichen verwendet wurden, die zweite echo-Anweisung ergibt die Ausgabe <p>Seite abgerufen am 17.05.2016 um 12:00:12 Uhr</p>, da die Variable $now in den doppelten Anführungszeichen durch ihren Wert ersetzt wurde.

[Bearbeiten] Heredoc- und Nowdoc-Schreibweise

Die beiden obigen String-Literale mit einfachen und doppelten Anführungszeichen lassen sich auch anders notieren, wenn es mehrzeilige Strings sein sollen. Erinnern wir uns an das Tabellen-Beispiel ganz am Anfang. Damit der HTML-Code mit den passenden Einrückungen an den Browser ausgegeben wird, lohnt es sich, mit Nowdoc-Schreibweise zu arbeiten:

Beispiel: mehrzeiliger HTML-Code mit Nowdoc-Schreibweise
<?php
  echo <<<'Begrenzer'
<table>
  <tr>
    <td>Inhalt</td>
  </tr>
</table>
Begrenzer;
?>
Bei der Nowdoc-Schreibweise wird eine fast beliebige Zeichenfolge als Begrenzer festgelegt, die in einfachen Anführungszeichen nach drei einleitenden Kleiner-als-Zeichen notiert wird. Danach muss ein Zeilenumbruch erfolgen. Alles nach dem Zeilenumbruch wird als Zeichenkette interpretiert, solange eine neue Zeile nicht mit der als Begrenzer festgelegten Zeichenfolge beginnt, eventuell gefolgt von einem Semikolon, welches in PHP das Ende einer Anweisung markiert.

Analog zu den doppelten Anführungszeichen um String-Literale, innerhalb derer Variablen aufgelöst werden, kann man die Heredoc-Schreibweise nutzen:

Beispiel: mehrzeiliger HTML-Code mit Heredoc-Schreibweise
<?php
  $now = date('H:i:s');
  $today = date('d.m.Y');
  echo <<<Begrenzer
<table>
  <tr>
    <th>Datum</th>
    <td>$today</td>
  </tr>
  <tr>
    <th>Uhrzeit</th>
    <td>$now</td>
  </tr>
</table>
Begrenzer;
?>
Bei der Heredoc-Schreibweise wird ebenso eine fast beliebige Zeichenfolge als Begrenzer festgelegt, allerdings ohne irgendwelche Anführungszeichen. Ansonsten gilt alles, wie bei der Nowdoc-Schreibweise. Im Unterschied zur Nowdoc-Schreibweise werden die Variablen $now und $today im String-Literal durch ihre Werte ersetzt.

[Bearbeiten] PHP als Programmiersprache

Dieser Artikel möchte keinesfalls nahelegen, dass komplexere Webapplikationen in dieser Art notiert werden sollten, da hier HTML-Markup und PHP-Programmlogik vermischt in einem Dokument notiert werden. In seiner Eigenschaft als Template-Sprache hat eine solche Notation durchaus ihren Sinn, nutzen doch ausgeklügelte Frameworks wie das Zend-Framework PHP in seinen Templates, jedoch ist es üblich die sogenannte Geschäftslogik von der Ausgabelogik zu trennen. Um dieses zu erreichen ist es notwendig, mit mehreren PHP-Dateien umzugehen, die zur Laufzeit bei Bedarf nachgeladen werden und ihrerseits wieder PHP- und/oder HTML-Code enthalten können.

[Bearbeiten] Weblinks

Meine Werkzeuge
Namensräume

Varianten
Aktionen
Übersicht
Index
Mitmachen
Werkzeuge
Spenden
SELFHTML