auch wenn du es geschafft hat, so kann man das nicht stehen lassen, den Unterschied zwischen reqire und include zu erklären.
der sieht nämlich so aus:
Syntax:
<? include ('file.inc'); ?>
<? require ('file.inc'); ?>
Im Grunde genommen - und das ist das verwirrende - bezwecken beide Funktionen das gleiche. Anstatt der o.a. Zeile wird jeweils der Inhalt der in Klammern stehenden Datei eingefügt. Das hat den Vorteil, dass man immer wieder vorkommende Daten (wie z.B. das Rahmenlayout dieser Webseite) in alle anderen Dateien einbinden kann, und wenn man mal was am Layout verändern will, man nur eine einzige Datei ändern muss, und nicht alle Dateien einzelnd. Nach neuesten Tests (Egon Schmid + Praktikantin) kann man in einer Datei sogar bis zu 4096 (!) require's bzw. include's machen.
Aber trotzdem gibt es den kleinen, aber feinen Unterschied zwischen den beiden Funktionen.
Die Benutzung von 'require' im Gegensatz zu 'include':
Die require Funktion lädt den Inhalt der in Klammern stehenden Datei in die aufrufende Datei ein. Der Aufruf wird also durch die aufgerufene Datei ersetzt. Problematisch wird das nun, wenn man die Funktion innerhalb einer Schleife benutzen will. Das darf man nämlich nicht. Wenn man z.B. drei Dateien nacheinander ausführen will (1.inc, 2.inc, 3.inc), so würde in einer Schleife mit 'require' die Datei 1.inc dreimal ausgeführt werden. Glaubt Ihr nicht? Dann probiert folgendes aus:
Der Require-Loop:
<?
$incArray = array('1.inc','2.inc','3.inc');
for ($i = 0; $i < count($incArray); $i++) {
require($incArray[$i]);
}
?>
Der Include-Loop:
<?
$incArray = array('1.inc','2.inc','3.inc');
for ($i = 0; $i < count ($incArray); $i++) {
include($incArray[$i]);
}
?>
Die drei einzubindenden Dateien:
<? echo("1. Datei<br>"); ?> (1.inc)
<? echo("2. Datei<br>"); ?> (2.inc)
<? echo("3. Datei<br>"); ?> (3.inc)
Letzte Zweifler überzeugt? Das Ergebnis beweist: Beim Require-Loop wird '1.inc' dreimal ausgeführt, beim Include-Loop werden alle drei Dateien schön brav nacheinander ausgeführt. Fazit: In Schleifen immer mit include arbeiten.
Worauf noch zu achten ist?
Wenn man die include-Funktion in einer Schleife benutzt (z.B. if-else), so muss sie in geschweiften Klammern stehen:
if ($bedingung) {
include('file.inc');
}
else {
include('anderesFile.inc');
}
Ein weiterer Unterschied besteht darin, das eine 'require'-Anweisung immer ausgeführt wird, d.h. auch, wenn sie in einer Anweisung steht die eigentlich gar nicht aufgerufen wird, weil sie 'false' ist. Include hingegen wird nur aufgerufen, wenn (hier) 'true' stehen würde.
Außerdem erzeugt eine 'require'-Anweisung, wenn sie eine Datei anfordert die nicht vorhanden ist, einen Fehler, eine 'Include'-Anweisung hingegen lediglich ein Warnung.
Des weiteren habe ich es als praktisch befunden, wenn man Include-Dateien in einem Verzeichnis (z.B. "includes') ablegt. Das dient der Übersichtlichkeit und hat noch einen Vorteil. Man kann mittels einer Variablen $IncludeRoot Problemen mit relativen und absoluten Pfadangaben entgehen.
$IncludeRoot = "/usr/bin/home/includes";
include($IncludeRoot.'/file.inc');
Beachten sollte man auch, dass die Verwendung von include_path in der php3.ini es ermöglichen kann, aus einem beliebigen Verzeichnis eine Datei zu includen, ohne ihren Pfad angeben zu müssen. Das vereinfacht die Arbeit in großen Sites mit tiefer Ordnerstruktur.
Um obigen Effekt zu erzielen, kann man auch anders verfahren:
Man legt ein Include-File innerhalb des DocumentRoot des Servers ab und baut sich dann den Pfad anhand von $DOCUMENT_ROOT zusammen, etwa wie in
include($DOCUMENT_ROOT."/include/config.inc.php3");
Man hätte ja nicht beide Befehler erfunden, wenn nicht unterschiedliche Befehle, Ausführungen oder Aufgaben daran geknüpft wären.
include- und reqire-Befehl sind also keinesfalls gleich!
Bestenfalls haben sie änliche Aufgaben und die Syntax ändert sich nur unwesentlich, die Aufgaben und die Einsatzgebiete hingegen sind wesentlich in ihren Unterschieden!