Files per Include in ein PHP-Script einbinden

Mittels der PHP-Anweisung include besteht die Möglichkeit Script-Code, der in verschiedenen Dateien verteilt abgelegt ist, in eine Webanwendung einzubinden. Die stetig wachsende Komplexität von Webservices führt zu immer umfangreicheren Scripten, die zur Durchführung der angestrebten Funktionalitäten programmiert werden müssen. Dabei hat der Programmierer stets die Wahl, ob er alle Funktionen in einer einzelnen Datei ablegt oder diese gruppiert in einzelnen Dateien unterbringt und bei Bedarf einbindet. Letzteres ist insbesondere dann praktisch, wenn die Übersichtlichkeit des Codes unter einer großen Fülle an Funktionen und Klassen leidet. Meist werden Funktionen, die logisch zusammengehörige Aufgaben erfüllen in speziellen Dateien abgelegt und immer dann einbezogen, wenn auf diese Funktionen zugegriffen werden soll. Darüber hinaus legt man auch Klassen in Dateien mit entsprechend bezeichnendem Namen ab, da sie eine logische Einheit bilden. Hierdurch wird neben der Auffindbarkeit auch die Wartbarkeit des Codes verbessert.

Include Path Beispiel: Absolute und relative Pfadangaben

Das Einbinden von PHP-Code in ein Script kann mittels der Anweisung include erfolgen. Aufgerufen wird die include-Anweisung mit einem Parameter, der angibt, welche Datei eingebunden werden soll. Ob der Parameter beim Aufruf von include geklammert angegeben wird oder nicht ist Geschmackssache. Der Name der einzubindenden Datei kann sowohl mit als auch ohne Pfadangabe notiert werden. Fehlt eine Pfadangabe, so wird die Datei in den Standard-Include-Verzeichnissen gesucht, die in der Konfigurationsvariablen include_path festgelegt sind. Im aktuellen Verzeichnis wird nur dann gesucht, wenn der in Form eines Strings gespeicherte Include-Path (auch include dir genannt, wobei letzteres für include directory steht) auch das aktuelle Verzeichnis – repräsentiert durch ein '.' – einbezieht. Die einzelnen Pfade werden auf Unix-Systemen durch Doppelpunkte, auf Windows-Rechnern dagegen durch Semikolons getrennt.

Die Vorbelegung des include_path erfolgt durch die PHP Konfigurationsvariable PHP_INCLUDE_PATH, die entweder in der Konfigurationsdatei php.ini oder in der Webserver-Konfiguration – in httpd.conf oder .htaccess – eingestellt werden kann. Innerhalb des Script-Codes kann der Include-Path nicht mehr verändert werden. Bei Angabe eines absoluten Pfades ist darauf zu achten, dass die Dateien – anders als der beim FTP-Upload gewählte Speicherort vermuten lässt – nicht im Hauptverzeichnis abgelegt sind, sondern in einem für die Website vorgesehenen (virtuellen) Webserver-Rootverzeichnis. Das Rootverzeichnis wird widerum in den Konfigurationsdateien httpd.conf bzw. .htaccess unter dem Namen open_basedir angegeben. Im PHP-Script kann dann der Zugriff auf diesen Wert mittels der vordefinierten Variable $_SERVER unter dem Array Index 'DOCUMENT_ROOT' erfolgen.

<?php
    // Datei ohne Angabe eines Pfades einbinden
    // Gesucht wird die Datei in allen Verzeichnissen, die im include_path
    // enthalten sind.
    include ('datei1.php');
    // aber auch folgende Schreibweise ist möglich
    include 'datei1.php';

    // Dateien mit relativem Pfad einbinden:
    // - Datei liegt im selben Verzeichnis, wie das einbindende Script
    include './datei1.php';
    // - Hier liegt das File im Unterverzeichnis includes
    include './includes/datei1.php';
    // - Oder eine Verzeichnisebene höher
    include '../datei1.php';

    // Files mit absoluter Pfadangabe einbinden
    // - Die Datei liegt tatsächlich im Verzeichnis /system/
    include '/system/datei1.php';
    // - Absolute Pfadangabe aufbauend auf dem Wurzelverzeichnis des Webservers
    include $_SERVER['DOCUMENT_ROOT'] . '/includes/datei1.php';
?>

Require Files Beispiel: Zwingend vorhandenes Config File einbinden

Neben include bietet der Befehl require einen weiteren Mechanismus zur Integration von extern gespeichertem PHP-Code. Der Unterschied zu include besteht darin, dass die Ausführung des Scripts umgehend mit einer Fehlermeldung abgebrochen wird, wenn der Zugriff auf die einzubindende Datei fehl schlägt. Im Gegensatz dazu wird die Verarbeitung des Scripts bei Verwendung von include nicht abgebrochen. Hier erfolgt lediglich die Ausgabe einer Fehlermeldung, die das Fehlen der einzubindenden Datei moniert.

<?php
    // Zwingend erforderliche Konfigurationsdatei, die sich im selben Verzeichnis
    // befindet, einbinden.
    require './config.php';

    // Weiterer Code, der die in config.php definierten Variablen, Klassen und
    // Funktionen verwendet
    :
    :
?>

Include HTML Beispiel: Integration von HTML- oder Textdateien

Mittels include oder require kann nicht allein zu interpretierender PHP-Code eingebunden werden. Auch HTML-Dateien die beispielsweise Templates (fertig formatierte HTML-Blöcke) enthalten können in ein PHP-File eingebunden werden. Diese HTML-Files werden, ebenso wie Textdateien, an der entsprechenden Stelle und so wie sie in der Datei abgelegt sind ausgegeben, da sie aufgrund ihres Dateityps – zumindest mit den Standardeinstellungen des Webservers – nicht vom PHP-Interpreter verarbeitet werden.

<?php
    // Konstanten Seitenheader einbinden und ausgeben
    include 'header.html';

    // PHP-Code, der die benötigten Aufgaben erfüllt
    // und dabei den entsprechenden Seiteninhalt erstellt.
    :
    :

    // Footer-Template ausgeben
    inclide 'footer.html';
?>

Include_once und Require_once

Include und require gibt es in einer weiteren Variante, die sicher stellt, dass Dateien nur ein einziges Mal in ein Script eingebunden werden. Zu diesem Zweck nutzt man die Befehle include_once bzw. require_once. Beide unterscheiden sich nur durch den Umstand, dass Dateien – wie der Name schon sagt – nur ein einziges mal geladen und geparst bzw. ausgeführt werden, von ihren Varianten ohne den Suffix _once. Wenn also eine Datei von mehreren Dateien eingebunden wird und dies jeweils mittels require_once oder include_once geschieht, dann wird das File nur einmal eingelesen und geparst. Nutzt der Entwickler statt dessen die Varianten ohne _once, so wird an jeder Stelle, an der eine Datei eingebunden wird auch der Parser bemüht, was unnötig Speicher und Rechenzeit verbraucht. Falls im eingebundenen File nicht nur Funktionen und Klassen definiert werden sondern auch Code ausgeführt wird, führt dies auch zu einer mehrfachen Ausführung des enthaltenen Codes.

<?php
    // Datei nur einlesen, wenn dies nicht schon an anderer Stelle geschehen ist
    include_once './datei1.php';

    // Einbinden wie zuvor mit Abbrechen des Scripts, wenn Datei nicht vorhanden
    require_once './datei1.php';
?>

HTTP-Include Beispiel: Dateien über URL einbinden

Unter PHP können Dateien nicht nur aus dem lokalen Dateisystem eingebunden werden. Auch per URL erreichbare Dateien können bei Bedarf mit include, require und deren Once-Varianten in eine Seite integriert werden. Voraussetzung hierfür ist allerdings, dass in der Serverkonfiguration die Direktive allow_url_fopen mit dem Wert 1 belegt ist. Normalerweise ist dies der Fall, allerdings sollte die Option aus Sicherheitsgründen deaktiviert werden.

<?php
    // Datei, die durch einen HTTP-Request geliefert wird, in die Ergebnisseite
    // einbinden
    include 'http://www.evocomp.de/service/news.php';

    // Webservice mit GET Parametern abrufen und in die Seite einbauen
    inclide 'http://www.evocomp.de/service/news.php?year=2008&month=06';
?>

¬ Tutorials



¬ Insolvenzrecht