Stefan Kleeschulte: Includes mit relativem Pfad innerhalb von includeten Dateien

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

  1. 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