Includes mit relativem Pfad innerhalb von includeten Dateien
Stefan Kleeschulte
- php
0 Harry
Hi zusammen!
Das Thema meines Beitrags mag sich ein wenig verwirrend anhören, aber ich wusste nicht, wie ich es anders hätte formulieren sollen.
Ich habe folgendes Problem:
Angenommen ich habe folgende Verzeichnisstruktur:
[home]
|-[scripts]
| |-[include]
| | |-header.php
| | '-footer.php
| '-script.php
'-index.php
In der Datei index.php binde ich jetzt mit dem Befehl
include ("scripts/script.php");
die Datei index.php im Unterverzeichnis scripts ein.
Nun möchte ich wiederum in der Datei scripts.php die Dateien header.php und footer.php einbinden. Das geht aber nicht einfach mit
include ("include/header.php");
include ("include/footer.php");
sondern ich muss den relativen Pfad von der Datei index.php aus gesehen angeben:
include ("scripts/include/header.php");
include ("scripts/include/footer.php");
Wenn ich mit require() arbeite verhält es sich genauso. Gibt es eine Möglichkeit mit der ich dem PHP-Interpreter sagen kann, er soll die relativen include-Pfade von der Datei aus sehen, in der sie stehen?
Ich kann nämlich nicht einfach die includes in der Datei scripts.php ändern: Das Problem bei der ganzen Sache ist, dass die Datei scripts.php von unterschiedlichen Dateien in unterschiedlichen Verzeichnissen eingebunden wird, und daher der include-Pfad immer unterschiedlich ist.
Für eure Tips und Ratschläge wäre ich euch sehr dankbar!
CU :-)
Stefan
n'Abend
Die Lösung zu Deinem Problem steht in den Benutzeranmerkungen zu include():
--------schnipp zitat von php.net------------
I had a problem with the "include". One of PHP's biggest
problems is that if (as someone previously noted) if file A includes file
B and file B wants to include file C and the files are in different
directories there can be complications, because file B's include path
automatically shifts to whatever file A's may be. A bit confusing to say
the least. But there is hope!
You can work around this problem by creating one page in every directory
and sub-directory of your project. Name this file "path.php" in
every directory. In path.php simply put:
define("BASE", "path-to-root-project-directory");
then, at the top of every php page, before any other includes, include
path.php.
Then, before any include statements, use the BASE global.
include "library.php" becomes:
include BASE."library.php"
Now you simply structure all includes to be relative to the project's base
directory, and every page will know how to get there. This explanation
makes it sound worse than it is.
Hope this helps someone out there.
--------------schnipp-------------------
(c) ryanflynnn@hotmail.com
http://www.php.net/manual/en/function.include.php
Ciao,
Harry