PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [php] Logik der include-/require-Funktion


ezzemm
2010-02-19, 10:52:53
Hallo zusammen!

Ich möchte ein Programm schreiben daß später in eine bestehende Webseite mittels "include" oder "require" eingebunden werden kann. Dieses Programm bindet seinerseits Dateien mittels "include" ein, was den Knackpunkt verursacht.

Folgendes Szenario:
Webseite: www/index.php
Skript: www/scripts/foo/index.php

Auf der Webseite wird das Programm "foo" so eingebunden:
include 'scripts/foo/index.php';

"foo" wiederum bindet eine "config.php" ein, die im gleichen Verzeichnis wie die "index.php" von "foo" liegt:
include 'config.php';


Die Logik hinter der Include-Funktion ist ja, das erst geschaut wird ob diese Datei vorhanden ist; und wenn ja wird sie eingebunden:
www/config.php

Und wenn sie nicht vorhanden ist, dann diese:
www/scripts/foo/config.php


Ich umgehe diese Problematik momentan dadurch, daß ich die Dateien von "foo" so benenne: foo.config.php

Gibt es eine elegantere Möglichkeit dieses Problem zu umgehen?

Tiamat
2010-02-19, 13:24:35
Include:
-Wird eine Datei aufgerufen, die nicht existiert, wird nur ein Warnhinweis ausgegeben.
-Includierte Inhalte können in Schleifen benutzt werden.

Require:
-Keine Überprüfung, ob eine Datei existiert, Fehlermeldung statt Warnhinweis.
-Kann nicht in Schleifen benutzt werden.
=> schneller, da nichts überprüft werden muss.

Mir leuchtet bei dir das Problem nicht ein.
Es gibt im Endeffekt eine Seite, die dein Programm included, dass wiederum selbst Dinge included. Ja und weiter ?

Fettkopp
2010-02-19, 14:28:16
Wenn es darum geht, wo die Datei liegt!? kannste nicht einfach die komplette Verzeichnisstrukutr angeben?

so dass "Foo" dann
include '/scripts/foo/config.php';

einbindet?

DanMan
2010-02-19, 18:12:17
Die Logik hinter der Include-Funktion ist ja, das erst geschaut wird ob diese Datei vorhanden ist; und wenn ja wird sie eingebunden:
www/config.php

Und wenn sie nicht vorhanden ist, dann diese:
www/scripts/foo/config.php
Nur, wenn du zu den PHP include Pfaden in der php.ini (?) diese Pfade hinzugefügt hast.

Pack die 2 include Befehle doch einfach in eine if() Bedingung.

ezzemm
2010-02-19, 18:13:19
Mir leuchtet bei dir das Problem nicht ein.

Das Problem ist, daß ich "Webseite" nicht kenne und ich nicht weiß ob sie eine "config.php" im Verzeichnis hat.
Aufgrund der Logik der include-Funktion würde ja in o.g. Beispiel die Datei "www/config.php" und nicht die von mir gewünschte "www/scripts/foo/config.php" eingebunden werden.


Wenn es darum geht, wo die Datei liegt!? kannste nicht einfach die komplette Verzeichnisstrukutr angeben?

so dass "Foo" dann
include '/scripts/foo/config.php';

einbindet?

Stimmt, so funktionierts; habs gerade ausprobiert.
Ich hatte die Befürchtung daß versucht wird "www/scripts/foo/scripts/foo/config.php" einzubinden.

Daß heißt ich müsste nur bei der Installation des Skripts dem User angeben lassen in welchem Verzeichnis das Skript relativ zu seiner "index.php" liegt und dann die Includes entsprechend anpassen:
include $path.'config.php';

Danke für die Hilfe :)