öffentlich
Redaktion Druckversion

PHP lernen (1): Einführung, Installation und erste Schritte

Einbindung von ausgelagerten Inhalten

PHP bietet einige Möglichkeiten, sich wiederholende Teile des Codes zu modularisieren. Dadurch kann verhindert werden, dass Sie immer gleiche Teile immer wieder neu schreiben müssen. Es vereinfacht natürlich auch die Pflege des Codes, wenn Änderungen nur noch an einer Stelle eingefügt werden müssen und sich dann sofort auf die gesamte Webseite auswirken.

Betrachten wir zunächst einige leicht nachvollziehbare Beispiele: Die Teile einer Webseite, die sich auf mehreren Seiten wiederholen, werden in eine Extradatei, eine sogenannte Include-Datei, ausgelagert. Ausgelagert werden darf alles: HTML-Code, Grafiken, JavaScript-Code und auch PHP-Code. PHP-Code muss wie gewohnt in PHP-Tags eingeklammert werden.

Unsere erste Extradatei soll footer.inc.php heißen. Sie könnte folgenden Code enthalten:

Name des <strong>Betreibers</strong> der Webseite

Eine Include-Datei funktioniert in der Regel nicht allein. Sie brauchen also ein Hauptskript, das diese Datei implementiert. In den einzelnen Seiten, in denen diese Fußzeile aufgerufen wird, wird einfach nur die Datei mit der PHP-Funktion include() bzw. dem Sprachkonstrukt require() eingebunden:

...
<body>
<p>Sonstiger Inhalt der Webseite mit Navigation, Inhalt etc.</p>

<?php
require('footer.inc.php');
?>
</body>
...

Für die Einbindung der ausgelagerten Datei gelten die gleichen Regeln für relative Pfadangaben wie in HTML bei Grafikverweisen oder Links. Im vorliegenden Beispiel liegt die Datei footer.inc.php also im gleichen Verzeichnis wie die Datei, die sie aufruft.

Stellen Sie sich vor, dass die Teile des Codes, die ausgelagert werden, durch require() bzw. include() in die Hauptdatei hineingeschrieben werden. Der Quellcode der externen Datei wird quasi an die Stelle der Hauptdatei geschrieben.

Wenn in einer ausgelagerten Datei lediglich Text oder HTML-Code steht, bietet sich auch die Funktion readfile() zum Einbinden an. Nur für Include-Dateien, die PHP-Code enthalten, ist es absolut notwendig, include() oder require() zu verwenden. Weitere Beispiele werden das verdeutlichen.

Sowohl bei include() als auch bei require() verlässt PHP den PHP-Container der Mutterdatei. Wenn eine eingebundene Datei also PHP-Code enthält, muss er wiederum in die PHP-Tags (<?php ... ?>) eingeklammert werden.

Eine ausgelagerte Datei zur automatischen Anzeige des PHP-Codes

Die PHP-Funktion highlight_file() zeigt komfortabel den PHP-Code einer Datei an, die ihr als Parameter übergeben wird. Ergänzen Sie also zum Beispiel in der Datei php1_w1_03.php kurz vor dem schließenden body-Tag den Funktionsaufruf und tragen als Parameter den Namen der gleichen Datei ein:

highlight_file('php1_w1_03.php');

Die Funktion erzeugt nun die Ausgabe des gesamten Codes unterhalb Ihrer Ausgaben. Das ist ein wenig unübersichtlich, besser wäre die Ausgabe des Codes in einem Extrafenster, so dass ausschließlich der Quellcode zu sehen ist, nicht aber Ihre Ausgaben. Dazu lagern wir die Funktion in eine Extradatei aus und binden diese Extradatei in jede Aufgabendatei ein.

Schreiben Sie zuerst die Include-Datei. Öffnen Sie eine neue, leere Datei und fügen die folgenden Zeilen dort ein:

<?php
highlight_file(basename($_SERVER["HTTP_REFERER"]));
?>

Sie sehen hier verschachtelte Funktionen. Damit die Ausgabe der aufrufenden Datei funktioniert, ohne dass Sie irgendwas anpassen müssen, brauchen wir den Namen des aufrufenden Skripts. PHP stellt diesen Namen in der Servervariablen $_SERVER["HTTP_REFERER"] zur Verfügung. Geben Sie sich diese Variable mit print aus. Sie werden sehen, dass die Ausgabe nicht nur den Dateinamen, sondern den gesamten Pfad unterhalb von htdocs enthält. Die Funktion highlight_file() baucht aber nur den Dateinamen.

Die innere Funktion heißt basename(). Sie extrahiert den Namen der Datei aus dem gesamten Pfad.

Die äußere Funktion highlight_file() bekommt also den Dateinamen der aufrufenden Datei übergeben und gibt den Quellcode dieser Datei aus.

Speichern Sie diese Datei unter dem Namen source.php.

Nun müssen Sie noch in den Aufgabendateien, also zum Beispiel in der Datei php1_w1_03.php, einen Link auf diese Datei setzen.

<a href="source.php" target="_blank">Quelltext im Extrafenster anzeigen</a>

Binden Sie diesen Link immer gleich in jede Aufgabendatei ein. So haben Sie komfortabel in jeder Aufgabendatei automatisch einen Link zur Verfügung, der die Ansicht des Quellcodes in einem Extrafenster erlaubt.

Beachten Sie, dass Sie mit highlight_file() nur von solchen Dateien den PHP-Code anzeigen lassen können, die sich auf dem gleichen Server befinden. Sie können also nicht einfach alle möglichen PHP-Dateien im Internet anzeigen lassen.

Die Endung *.inc.php

Die Benennung der ausgelagerten Datei mit .inc ist Konvention in der PHP-Gemeinde. Die Endung .inc zeigt an, dass es sich um eine Include-Datei handelt, die in der Regel nicht allein funktioniert. Das ist üblich, um sich selbst und anderen die Pflege der PHP-Seite zu erleichtern. Sie erkennen bereits am Namen, dass es sich nicht um ein vollständiges Skript handelt.

In Include-Dateien werden zum Beispiel Pfade oder Zugangsdaten deklariert. Genauso werden Codeteile und Funktionen oder Objekte in Include-Dateien ausgelagert.

Theoretisch können Sie der ausgelagerten Datei jede beliebige Endung geben. Technisch funktionieren werden auch die folgenden Beispiele:

  • include('test.inc')

  • include('test.dat')

  • include('test.irgendwas')

Wichtig ist nur, dass die Hauptdatei die Endung .php hat, damit der Webserver das Skript an den PHP-Parser schickt. Der PHP-Code der ausgelagerten test.inc, test.dat oder test.irgendwas wird dann ebenfalls geparst.

Viele Webserver, wie auch der akademie.de-Server, liefern jedoch Dateien mit unbekannter Endung im Klartext an den Client aus. Je nach Konfiguration kann eine .inc-Datei ebenfalls ausgeliefert werden. Wenn Sie also in einer .inc-Datei Passwörter ablegen, kann es sein, dass ein findiger Besucher Ihrer Webseite auf die Idee kommt, so was mal auszuprobieren:
http//www.irgendeine-Domain.de/includes/config.inc

Dumm, wenn er dann tatsächlich die Zugangsdaten zur Datenbank im Klartext ausgegeben bekäme. Besser ist also immer noch ein .php ranzuhängen (config.inc.php), damit die Datei geparst wird. Dann wird bei Direktaufruf der Datei nur eine leere Seite ausgegeben.

Auch hierbei gibt es "worst case" die Möglichkeit, dass der Webserver nicht richtig funktioniert und deshalb die Zugangsdaten doch direkt ausgegeben werden. Ein IMHO vertretbares Risiko. Handelt es sich um wirklich sensible Daten, sollten sie jedoch in ein Verzeichnis ausgelagert werden, das der Internetuser gar nicht einsehen kann. Die PHP-Skripte können die Datei dann auslesen, ein direkter Aufruf der Datei aus dem Internet wie oben beschrieben ist aber nicht möglich.

Für eine solche Konfiguration steht manchmal das Verzeichnis inlcudes zur Verfügung. PHP-Skripte, die auf dem gleichen Webserver liegen, können die Dateien in diesem Verzeichnis auslesen. Der Pfad zu diesem Verzeichnis kann in der php.ini gesetzt werden, dann braucht er nicht einmal in den aufrufenden PHP-Skripten relativ gesetzt werden. Vom Internet aus können diese Dateien jedoch nicht direkt aufgerufen werden.

Wenden Sie sich bei Fragen zum Include-Verzeichnis an den Serveradministrator.

Bedingte Einbindung von Include-Dateien

Wenn Sie das Einbinden der Datei an eine Bedingung knüpfen wollen, den Aufruf also innerhalb einer bedingten Anweisung oder Schleife starten, müssen Sie include() verwenden. Das Sprachkonstrukt require() wird in jedem Fall ausgeführt, auch wenn die Schleife, in der require() steht, aufgrund ihrer Bedingung nicht ausgeführt wird. Rufen Sie require() innerhalb einer while- oder for-Schleife auf, wird es auf jeden Fall einmal ausgeführt, aber eben auch nur einmal. Benutzen Sie also require(), wenn die Datei in jedem Fall eingebunden werden soll. Benutzen Sie jedoch include(), wenn der Aufruf der Datei an eine Bedingung geknüpft ist oder innerhalb einer Schleife stattfinden soll.

Es gibt einen weiteren Unterschied zwischen include() und require() in der Verarbeitung. Wenn die Include-Datei nicht eingebunden werden kann, weil zum Beispiel der Pfad falsch ist oder die eingebundene Datei nicht existiert, bricht require() das Hauptskript ab. Die Funktion include() hingegen gibt bei einem Fehler eine Warnung aus, das Hauptskript wird aber weiter ausgeführt.

Variablen in Include-Dateien

Alle Variablen, die in der Zeile des Hauptskripts bekannt sind, in der die externe Datei eingebunden wird, sind auch der externen Datei bekannt. Sie können also in der ausgelagerten Datei auf Variablen des Hauptskripts zugreifen. Dazu schreiben Sie ein Hauptskript mit folgendem Code:

<?php
$variable = 'Hallo Welt';
include('test.inc.php');
?>

Die Extradatei enthält folgenden Code:

<?php
print $variable;
?>

Und die Ausgabe wird an der Stelle erfolgen, wo im Hauptskript die Funktion include() aufgegriffen wird. Testen Sie das mit mehreren Ausgaben:

<?php
$variable = 'Hallo Welt';
print 'vorher<br>';
include('test.inc.php');
print '<br>nachher';
?>

Auf Variablen und ihrem Geltungsbereich kommen wir später noch mal ausführlicher zurück.

Umgekehrt funktioniert das genauso: Alle Variablen, die in der externen Datei definiert wurden, sind nach dem include() bzw. require() auch in der Hauptdatei bekannt. Dieses Verhalten kann man sich zunutze machen: Häufig werden Variablen, die z. B. für den Zugang zur Datenbank benötigt werden, in eine Konfigurationsdatei geschrieben. Diese Datei wird dann ganz oben in alle Skripte eingebunden, so dass die Variablen überall zur Verfügung stehen, wo sie benötigt werden. Wenn diese Variablen angepasst werden müssen, weil das Projekt auf einen anderen Server gelegt wird, brauchen die Daten nur an einer Stelle, nämlich in der Konfigurationsdatei, geändert werden.

Mitglied werden, Vorteile nutzen!

  • Sie können alles lesen und herunterladen: Beiträge, PDF-Dateien und Zusatzdateien (Checklisten, Vorlagen, Musterbriefe, Excel-Rechner u.v.a.m.)
  • Unsere Autoren beantworten Ihre Fragen

Downloads zu diesem Beitrag

Newsletter abonnieren