Quakenet/#php Tutorial

Hinweis: Wenn sie diese Seite von einer externen URL aufgerufen haben achten sie darauf das alle Kapitel aufeinander aufbauen. Stellen sie daher sicher dass sie alle vorherigen Kapitel gelesen haben, da sie sonst relevante Informationen übersehen.

Include

  1. Auslagern von Programmteilen
  2. Include
  3. Include mit Verzeichnisstrukturen
  4. Return von Include

1. Auslagern von Programmteilen

Wenn man nun beginnt seine PHP-Skripte zu schreiben werden diese immer länger und länger. Wenn man dann auch z.B. andere PHP-Skripte hat, die in etwa den selben Aufbau haben so hat man einerseits auch wieder ein PHP-Skript das länger und länger wird, andereseits auch ein PHP-Skript dessen Code auch teilweise identisch in anderen PHP-Skripten steckt. Sinnvoller wäre es wenn man all diese identischen Teile auslagern kann und in seinen PHP-Skripten sowas wie Lade den Code XY. Eine Möglichkeit besteht mit Funktionen. Diese müssen aber auch im PHP-Skript selbst stehen und können entsprechend auch doppelt und dreifach in mehreren PHP-Skripten stehen. Besser ist da die Verwendung von include. Diesem Sprachkonstrukt übergibt man ein Dateinamen und das Skript verarbeitet den Inhalt dieser Datei als PHP-Code.

2. Include

Wenn in einem PHP-Skript das include Sprachkonstrukt verwendet wird passieren intern ungefähr folgende Dinge.

  1. Beenden des PHP-Modus (?>).

  2. Laden und Verarbeiten der Datei.

  3. Wiedereintritt in den PHP-Modus (<?php).

Die Verarbeitung geschiet dann genau so als würde der Inhalt der Datei an der Stelle eingefügt wo das include steht. Intern wird dabei wie gesagt vorher der PHP-Modus verlassen und nachher wieder der PHP-Modus betreten.

<p>
    HTML Code in einer Datei <code>datei.html</code>.
</p>
<?php
// Inhalt einer index.php Datei die vom Benutzer geöffnet wird.

echo 'Vor dem Include';

include 
'datei.html';

echo 
'Nach dem Include';
?>

Die entstehende HTML-Quellcode Ausgabe ist die folgende.

Vor dem Include<p>
    HTML Code in einer Datei <code>datei.html</code>.
</p>
Nach dem Include

Hier sieht man auch warum es wichtig ist dass PHP beim include den PHP-Modus verlässt. So wird sichergestellt das sehr einfach und ohne Probleme HTML-Dateien geladen werden können. Intern würde der oben stehende PHP-Code wie folgt aussehen.

<?php
// Inhalt einer index.php Datei die vom Benutzer geöffnet wird.

echo 'Vor dem Include';

?><p>
    HTML Code in einer Datei <code>datei.html</code>.
</p>
<?php

echo 'Nach dem Include';
?>

Dies heißt auch wenn man PHP-Dateien auch als PHP-Skripte laden möchte so müssen diese auch die PHP-Start/Stop-Zeichen <?php und ?> enthalten.

<?php
// Datei: foobar.php
echo "Eine zweite Zeile\n";
?>
<?php
// Datei: index.php, wird vom Benutzer geöffnet
echo "Erste Zeile\n";
include 
'foobar.php';
echo 
"Dritte Zeile\n";
?>

Erzeugt die erwartete Ausgabe.

Erste Zeile
Eine zweite Zeile
Dritte Zeile

PHP hat intern umgefähr folgendes gemacht.

<?php
// Datei: index.php, wird vom Benutzer geöffnet
echo "Erste Zeile\n";
?><?php
// Datei: foobar.php
echo "Eine zweite Zeile\n";
?><?php
echo "Dritte Zeile\n";
?>

Nehmen wir für unsere Vereinfachung die ?><?php Zeilen herraus sehen wir den PHP-Code den wir genau haben wollten.

<?php
// Datei: index.php, wird vom Benutzer geöffnet
echo "Erste Zeile\n";
// Datei: foobar.php
echo "Eine zweite Zeile\n";
echo 
"Dritte Zeile\n";
?>

Aus diesem Grund können auch Variablen verwendet werden, die erst in einer anderen PHP-Datei definiert werden.

<?php
// Datei: config.php
$vorname 'Max';
$nachname 'Mustermann';
?>
<?php
// Datei: index.php, die vom Benutzer geöffnet wird
include 'config.php';

echo 
'Ich bin '.$vorname.' '.$nachname.', Willkommen auf meiner Homepage';
?>

3. Include mit Verzeichnisstrukturen

Wenn eine Datei geladen wurde die in einem Unterverzeichnis liegt und diese Datei nun z.B. eine weitere Datei laden möchte so sucht PHP an zwei Stellen nach dieser Datei. Die erste Position von der gesucht wird ist die Position von der Datei die die neue Datei laden möchte. Die zweite Position ist die Position von der Datei, die am anfang vom Browser geöffnet wurde. Da dies unverständlich klingt lieber hier ein Beispiel.

<?php
// index.php (wird vom Benutzer aufgerufen)
include 'inc/config.php';
echo 
'Mein Name ist "'.$name.'"';
?>
<?php
// config.php (im Verzeichnis inc/)
include 'functions.php';
include 
'variables.php';
echo 
"Konfiguration geladen\n";
?>
<?php
// functions.php (im selben Verzeichnis wie index.php)
function foobar() {
    
// ...
}
echo 
"Funktionen geladen\n";    
?>
<?php
// variables.php (im Verzeichnis inc/)
$name 'Max Mustermann';
echo 
"Variablen geladen\n";
?>

Die Verzeichnisstruktur sieht wie folgt aus.

index.php
functions.php
inc/config.php
inc/variables.php

Wenn nun die index.php geöffnet wird, so entsteht folgende Ausgabe.

Funktionen geladen
Variablen geladen
Konfiguration geladen
Mein Name ist "Max Mustermann"

Es scheint also fast kein Unterschied zu machen wo nun die Dateien liegen die man laden möchte (hier jetzt functions.php und inc/variables.php). Intern schlägt nun der Mechanismus zu wo er die Datei sucht und dann auch findet.

Dieser interne Mechanismus kann aber auch zu Problemen führen, dass es zwei Möglichkeiten gibt wo eine Datei liegen kann (mit include_path sogar mehrere). Dieses Verhalten kann deaktiviert werden wenn die zu ladene Datei mit ./ oder ../ anfängt. Dann wird nur noch von der Startdatei gesucht, nicht mehr von der Include-Datei.

Für den Entwickler heißt dies dass man in einer PHP-Datei, welches includiert wird, weiterhin include verwenden kann ohne wissen zu müssen von wo das eigene Skript später aufgerufen wird. Die Entwickler schreiben somit in ihren Skripten einfach include 'variables.php'; anstelle von wilden Ausdrücken wie include dirname(__FILE__).'/variables.php';.

4. Return von Include

Include-Dateien können wie Funktionen auch ein return enthalten. Somit ist es möglich ein include wie eine Funktion zu behandeln und den Rückgabewert in eine Variable zu speichern.

<?php
// datei.php
return "text";
?>
<?php
// index.php
$var = include 'datei.php';
echo 
$var// gibt 'text' aus
?>

Die include Anweisung liefern Standardmäßig den Integerwert 1 zurück. Dies ist auch eine häufige Fehlerquelle bei include von Anfängern. Diese schreiben in ihren Skripten Ausdrücke wie echo include 'news.php';. Neben der Tatsache dass das Newsskript geladen wird erhalten sie auch am eine in der Ausgabe eine zusätzliche 1 und wundern sich woher diese kommt. Daher auch der Hinweis dass echo include '....'; in seltenen Fällen Sinn ergibt.

Fragen zum Kapitel

Keine Fragen zum Kapitel vorhanden

Zurück zu Weiter zu
Copyright © bei den OPs von #php.de/QuakeNet Valid XHTML 1.0 Strict Valid CSS!