PHP include
Autor
Flitze
Klicks 29795
Keywords:
include(), PHP include, PHP includes, include php, include in PHP, PHP include in include, Pfad bei include
Klicks 29795
Rating für PHP include
3.5 von 10
Bewertungen4
Stand
11.06.2013
3.5 von 10
Bewertungen4
Keywords:
include(), PHP include, PHP includes, include php, include in PHP, PHP include in include, Pfad bei include
Breadcrumb:
Tipps » PHP include
In diesem Tipp möchte ich euch eine mächtig Technik von PHP vorstellen: Die Fähigkeit, andere Dateien zu inkludieren. Die entsprechende Funktion dazu lautet include(). Auf den ersten Blick weiß man die Vorteile von include() vielleicht gar nicht zu schätzen, aber PHP includes können einem PHP Programmierer das Leben ganz schön erleichtern.
Wie funktioniert include()?
[ADSENSE_LINE]Den PHP include einer Datei kann man sich so vorstellen, als würde man manuell per copy & paste eine Datei in einer andere kopieren. Das folgende Beispiel dient als Veranschaulichung.
Datei i_include.php
PHP:
<?php
echo "Hallo ";
include "i_am_included.php";
echo "Welt";
?>
Datei i_am_included.php
PHP:
<?php
echo "schöne neue ";
?>
Wenn ich nun die Datei i_include.php aufrufe, bekomme ich den folgenden Text ausgegeben:
Code:
Hallo schöne neue Welt
Wenn PHP die Dateien ausführt, macht es bei einem include() also tatsächlich nichts anderes, als den Text aus der einen Datei in die andere zu kopieren. Für den PHP Interpreter sieht es also so aus, als würde er den Quellcode
PHP:
<?php
echo "Hallo ";
echo "schöne neue ";
echo "Welt";
?>
abarbeiten.
Die erste Erkenntnis, die wir daraus ziehen ist: Es spielt eine Rolle, an welcher Stelle im Quellcode das include steht, denn an dieser Stelle wird der Code eingefügt.
PHP includes können aber noch mehr. Ich kann nämlich nicht einfach bloß Text ausgeben, sondern ich kann auch ganze PHP Skripte inkludieren, inklusive ihrer Funktionen und Variablen! Ich bediene mich zur Verdeutlichung dieser Aussage eines modifizierten Beispiels von php.net:
Datei vars.php
PHP:
<?php
$farbe = 'grün';
$frucht = 'Apfel';
function ausgabe(){
echo "Hallo Welt!";
}
?>
Datei test.php
PHP:
<?php
echo "Der $frucht ist $farbe."; // Ausgabe: Der ist .
include 'vars.php';
echo "Der $frucht ist $farbe."; // Ausgabe: Der Apfel ist grün.
ausgabe(); // Ausgabe: Hallo Welt!
?>
Wir können also (und das ist einer der großen Vorteile von PHP includes) ganze Funktionalitäten auslagern und dadurch das PHP Projekt modular aufbauen. Dieser modulare Aufbau ermöglicht unter anderem:
- PHP Entwicklerer können am gleichen Projekt gleichzeitig unabhängig voneinander an verschiedenen Dateien arbeiten.
- Dateien können spezifisch für Funktionen erstellt werden. Das erhöht die Übersicht und späterer Wartbarkeit.
- Bei Änderungen müssen lediglich kleine Dateien hochgeladen.
- Dateien können logisch getrennt werden, zum Beispiel nach dem Model View Controller Prinzip
Anmerkung
Die Sache mit dem "kopieren" ist eigentlich nicht ganz korrekt, erleichtert aber das Verständnis der include Funktion. Real passiert folgendes:
- Der PHP Interpreter stößt auf den include Befehl
- Es wird versucht, die Datei zu finden (falls das nicht klappt gibt es eine Warnung)
- Der PHP Interpreter verlässt den PHP Modus
- Die inkludierte Datei wird interpretiert (deshalb muss diese auch mit <?php beginnen, wenn dort PHP Code drin steht)
- Die Ursprungsdatei wird weiter abgearbeitet
Probleme mit PHP includes
Die include Funktion erleichtert uns das Leben um einiges und bietet eine Menge toller Möglichkeiten. Allerdings gibt es auch einiges zu beachten, wenn man diese Funktion benutzt. Eines der häufigsten Probleme, das include in include Problem, möchte ich hier kurz vorstellen.
Wenn man der Funktion einen Pfad übergibt, dann wird dieser Pfad immer ausgehend von der aktuellen Position im Verzeichnisbaum des Webserver interpretiert. Das bedeutet, dass ihr darauf achten müsst, die richtige Pfadangabe zu machen. Nehmen wir man an, ihr hättet die folgende Ordnerstruktur
Code:
/include_1.php /foo/include_2.php /inc/i_am_included.php
Wenn ihr nun die Datei i_am_included.php inkludieren wollt, dann müsst ihr in der Datei include_1.php folgendes schreiben:
PHP:
<?php
include "inc/i_am_included.php";
?>
In der Datei include_2.php im ordner foo hingegen, müsstet ihr jetzt schreiben:
PHP:
<?php
include "../inc/i_am_included.php";
// durch das "../" wechselt ihr in das root Verzeichnis "/"
?>
Soweit so gut, richtig kompliziert wird es aber, wenn ihr include_2.php in include_1.php inkludieren wollt, also wenn ihr in include_1.php schreibt:
PHP:
<?php
include "inc/i_am_included.php";
include "foo/include_2.php";
?>
Wie ich oben erklärt habe, wird ja nun lediglich der Dateiinhalt in das neues Skript kopiert, so dass dort eigentlich stünde:
PHP:
<?php
include "inc/i_am_included.php";
// hier folgt nun der Inhalt von include_2.php
include "../inc/i_am_included.php";
?>
Das Problem wird offensichtlich: Dadurch, dass ich den Inhalt von include_2.php nun in include_1.php ausführen will, passt der Pfad nicht mehr, den ich vorher in include_2.php gespeichert habe. Wenn ich den Pfad nun ändere, kann ich include_2.php aber nicht mehr direkt aufrufen – sonst würde der Pfad ja wieder nicht passen.
Zum Glück gibt es (für die meisten Fälle) eine einfache Lösung, um das Problem zu umgehen. Man benutzt einfach absolute Pfade statt relativer Pfaden. Dazu verwendet man die $_SERVER Variable $_SERVER['DOCUMENT_ROOT'], die den Pfad zum tatsächlichen Verzeichnis auf dem Webserver enthält. Die "korrigierten" Versionen von include_1.php und include_2.php sehen damit wie folgt aus:
PHP:
<?php
include $_SERVER['DOCUMENT_ROOT']."inc/i_am_included.php";
?>
Weiterführende Informationen zu includes findet ihr unter anderem auf
- php.net unter PHP: include
- PHP include im Quakenet #php Tutorial
- Verwendung von include zum Ersatz von Frames
- Alternative Funktionen zu include
Bewerten