PHP/Tutorials/Einstieg/Zusammenspiel mit HTML
- 10-15min
- einfach
- Grundkenntnisse in
● HTML
● Webserver
● Webserver lokal einrichten
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.
Inhaltsverzeichnis
Kommunikation zwischen 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.
<article>
<h1>Überschrift</h1>
<p>Das ist ein Absatz</p>
</article>
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:
<p>Seite abgerufen am
<?php
echo ( date('d.m.Y \u\m H:i:s') );
?>
Uhr</p>
<?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.
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:
<p>Seite abgerufen am <?= date('d.m.Y \u\m H:i:s'); ?> Uhr</p>
<?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.
<?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.
<?php
echo '<p class="abruf">Seite abgerufen am ', date('d.m.Y \u\m H:i:s'), ' Uhr</p>';
?>
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.