Dynamic Web Pages: deutschsprachiger PHP Knotenpunkt seit 1999

Dynamic Web Pages : tutorials _





 
 
 
 
 
 
 

PHP QuickRef

Via QuickRef gelangen Sie direkt zur gesuchten Funktion im Handbuch.

 
 

Printmedien

PHP-Magazin
Das PHP Magazin erscheint 2-monatlich zum Preis von 9,80 €. Studenten erfreuen sich über ermäßigte Abos.

PHP-Journal
Das PHP Journal erscheint 2-monatlich zum Preis von 14,95 €. Studenten und Abonnenten erfreuen sich über bis zu 25% Ermäßigung.

PHP Solutions Magazin
Das PHP Solutions Magazin erscheint alle 3 Monate zum Preis von 8,75 €. Studenten erfreuen sich über ermäßigte Abos.

PHP-Architect
Der php|architect erscheint monatlich als digitale PDF-Version zum Preis von $3,99 USD und als Print-Version zum Preis von $8,69 USD. Im Abo gibt es Rabatt (30% Print, 15% PDF).

 
Wissenswertes zu require() und include()
 
Wolfgang Drews   Wolfgang Drews       

 Es sind des Öfteren Threads über die Vor- und Nachteile von der Benutzung von require oder include in der ML vorgekommen, deswegen eine kleine Abhandlung über diese Funktionen und wann man welche benutzen sollte. 

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");


Vielen Dank an Marian Steinbach, für die letzten beiden Ergänzungen :-)

 
Wissenswertes zu require() und include() (13 Kommentare)
  26.07.2000:   include (0)
  23.10.2000:   Seitenbedingte Variablen. (0)
  24.02.2001:   require() wird nicht immer ausgeführt! (4)
  14.11.2001:   require schneller? (0)
  14.11.2001:   frage wg. $IncludeRoot (1)
  28.02.2002:   Hinweise zu include() & include_path (0)
  15.03.2002:   Und dann gibbet noch virtual (1)
  06.05.2002:   Functions aus anderen dateien aufrufen ( Hilfe ! ) (0)
  13.05.2002:   ... (0)
  02.07.2002:   require() / include() (1)
  16.09.2003:   include (0)
  26.10.2005:   Beispiel : Ergebnis identisch ! (1)
  07.12.2006:   Nicht Aktuell!!! (0)
zurück
   
powered by Hetzner


top Alle Rechte vorbehalten. © Dynamic Web Pages 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 top

  Seitenaufbau in 0.008 Sekunden