PHP-Tutorial: Includes

Wo wir schonmal bei Dateien sind, will ich euch natürlich nicht vorenthalten, dass man seine Scripte nicht immer in eine Datei quetschen muss! Man kann sie auf verschiedene Dateien verteilen. Dies macht den Code zum einen sehr viel übersichtlicher, und somit leichter zu warten, und zum anderen natürlich auch dynamischer. Wir können nun zum Beispiel Inhalte, die wir auf allen Seiten benötigen, wie das Hauptmenü oder eine Umfrage o.Ä. dynamisch mit dem Inhalt der Seiten verbinden und müssen nicht auf jede HTML-Seite das Menü statisch hineinschreiben. Wenn wir nun etwas am Menü ändern wollen, bringt dies den großen Vorteil, dass wir es nur in dem eingebundenen Script ändern brauchen und somit auf allen Webseiten geändert haben. Ich demonstrier das mal kurz an 4 Dateien. Ein Menü (menue.php), zwei Seiten mit Inhalt (eins.php und zwei.php) und einer Seite (index.php), die uns den Rahmen der Webpräsenz liefert. Alle Dateien sollen im selben Verzeichnis liegen!
In das Menü schreiben wir HTML-Code, einfach zwei Links auf die beiden Seiten mit Inhalt:

1
2
<a href="index.php?seite=eins">eins</a>
<a href="index.php?seite=zwei">zwei</a>

Es ist wirklich vollkommen ausreichend diese beiden Zeilen in die Datei zu schreiben, ohne andere HTML-Tags! Warum? Werd ich noch erklären.
In die Seiten eins.php und zwei.php kann man prinzipiell hineinschreiben was man möchte, es sollte nur etwas unterschiedliches sein, um sie später unterscheiden zu können. Ich schreibe in meine eins.php

1
eins

und in die zwei.php eine

1
zwei

Dies hatte bis hierhin natürlich rein gar nichts mit PHP zu tun, wird sich aber mit unserer Rahmen-Datei ändern. In diese bauen wir unser HTML-Grungerüst, includieren das Menü, und je nach dem was der User gewählt hat, eine der beiden Dateien eins.php und zwei.php:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<html>
<head><title>include-Test</title></head>
<body>
<h1>Dies ist mein include-Test</h1>
<?php
//als erstes binden wir unser menue ein!
include ("menue.php");
//damit unser content in einem paragraph steht beginnen wir diesem
echo "<p>";
//jetzt gucken wir was der user sehen moechte
switch ($_GET["seite"])
{
case "eins":
include ("eins.php");
break;
case "zwei":
include ("zwei.php");
break;
default:
echo "Bitte w&auml;hle im Men&uuml; eine Seite aus!";
}
//und den content-paragraphen natuerlich wieder schliessen
echo "</p>";
?>
</body></html>

An den Stellen, wo im Code ein include(...); auftaucht, wird eine fremde Datei eingebunden. Das heißt alles was in der anderen Datei steht, wird quasi jetzt an diese Position geschrieben. Das heißt der PHP-Parser arbeitet die Datei nun von oben nach unten ab, läßt den Kopf der Datei unverändert, denn hier gibt es nichts für ihn zu tun. Ab der Stelle <?php ist nun seine Aufmerksamkeit gefordert. Das erste was er findet ist ein Kommentar, wird überlesen. Das nächste ist ein include, hier wird eine neue Instanz des Parsers angeworfen, der die includierte Datei parsed (daher kann man in den includes natürlich auch wieder in <?php und ?> PHP-Code schreiben), hier (menue.php) ist nichts zu tun, diese wird so gelassen und einfach zu der bisherigen Ausgabe (bisher erst der Header) geschrieben. Danach findet der Parser ein echo, dies hängt er natürlich auch an die Ausgabe. Nun gilt es das switch-Statement zu parsen. Hier überprüfen wir, was in der Variable seite steht, die wir aus der URL bekommen (vergleiche die Links in der menue.php). Hat die Variable den Wert eins, includieren wir eins.php, also wird das Wort "eins" an die Ausgabe gehängt. Hat die Variable den Wert zwei, parsen wir zwei.php und hängen diese Ausgabe wieder an die bisherige Ausgabe (hier das wort "zwei"). Hat die Variable seite keinen oder einen völlig anderen Wert, benutzen wir eine default-Ausgabe (hier könnten wir natürlich eine default-Datei einbinden, zb. die Start-Seite). Dann findet der Parser noch ein echo, was er auch wieder anhängt und für den Rest hat er nichts mehr zu tun. Also sieht der Quelltext unserer geparsten Seite z.B. so aus wenn wir sie über [...]/index.php?seite=eins aufrufen:

1
2
3
4
5
6
7
8
<html>
<head><title>include-Test</title></head>
<body>
<h1>Dies ist mein include-Test</h1>
<a href="index.php?seite=eins">eins</a>
<a href="index.php?seite=zwei">zwei</a>
<p>eins</p>
</body></html>

Wollen wir nun das Menü ändern und den ersten Link umbenennen, von "eins" vielleicht in "one", müssen wir nur noch die Datei menue.php ändern und haben die Änderungen für alle unsere Webseiten übenommen! Für zwei Seiten ist natürlich noch recht fragwürdig ob sich der Aufwand lohnt, aber später werdet ihr mir zustimmen, dies ist eine sehr praktische Erfindung. Das kleine Beispiel könnt ihr euch hier herunterladen: include.bsp.tgz (723,00 B) .
Statt dem include(FILE) kennt PHP noch den Befehl include_once(FILE), damit signalisiert man dem Parser er soll die Datei nicht einbinden, wenn sie an einer vorherigen stelle schon einmal eingebunden wurde. Wenn die Datei nicht existiert oder nicht gelesen werden kann, gibt PHP einen Fehler aus, setzt die Abarbeitung des weiteren Scripts aber fort (genauer: Es wird ein E_WARNING geworfen). In einigen Fällen kann man aber nicht auf das Einbinden verzichten, hierfür kann man die Befehle require(FILE) und require_once(FILE) verwenden. Kann die Datei dann nicht gelesen werden, meldet PHP auch einen Fehler (es wird ein E_ERROR geworfen), bricht hier aber die weitere Abarbeitung ab! Probiert's einfach aus.

© 2009-2017 by Martin Scharm