Typhox: relatives include

Hallo,

Wenn ich in einer Datei zum Beispiel stehen hab "include 'abc.php'" (also 'ne relative Angabe) und rufe die Datei aus einem anderen Ordner via include "/skripts/skript.php" auf, dann geht das nicht. (Zumindest nicht, wenn im gleichen Ordner ebenfalls eine abc.php ist.) Gibt es da 'ne Möglichkeit, dass das irgendwie doch geht?
Oder muss ich jetzt dort alles Absolut aufrufen (z.B. via $_SERVER['PHP_SELF'])?

Danke, Typhox

  1. Hallo,

    Oder muss ich jetzt dort alles Absolut aufrufen (z.B. via $_SERVER['PHP_SELF'])?

    hüte dich davon irgendwie $_SERVER['PHP_SELF'] zu nutzen. Lieber dann in einer config Datei eine document root Konstante definieren, die den absoluten Pfad zu deinem Wurzelverzeichnis angibt.

    Kleiner Tipp:
    Eine gute Ordnerstruktur erspart dir viel Kummer. Das includen kreuz und quer durch die Ordner macht dein Script extrem unübersichtlich und schlecht nachvollziehbar.

    1. Naja, mein Problem löst es zwar jetzt überhaupt nicht...

      Zu erstens:
       Das mit der Config-Datei halte ich für keine besonders gute Idee, da ich ja nicht wissen kann, wo sich meine Datei gerade befindet. Aber das ist in diesem fall auch eher egal, da ichs hier sowieso (noch) nicht nutze.

      Zu Tipp:
       Ich includiere keinesfalls kreuz und quer durch den Ordner, sondern versuche nur, eine möglichst gute Übersicht zu schaffen. Und das wäre eben deutlich einfacher gewesen, wenn ich meine Bibliotheken in ein Unterverzeichnis hätte stecken können.
      Da das aber allem Anschein nach nicht zufriedenstellend geht, werde ich mich wohl nach Alternativen umsehen müssen :-( .

      ..., Typhox

    2. Moin!

      Hallo,

      Oder muss ich jetzt dort alles Absolut aufrufen (z.B. via $_SERVER['PHP_SELF'])?
      Lieber dann in einer config Datei eine document root Konstante definieren, die den absoluten Pfad zu deinem Wurzelverzeichnis angibt.

      Du meinst $_SERVER['DOCUMENT_ROOT']?

      :)

      - Sven Rautenberg

      --
      "Love your nation - respect the others."
  2. Hallöchen,

    schau dir mal diese Diskussion an, das dürfte ziemlich das betreffen, was du suchst.

    MfG
    vaudi

    1. Hallöchen,

      schau dir mal diese Diskussion an, das dürfte ziemlich das betreffen, was du suchst.

      MfG
      vaudi

      Ungefähr ja, Es hilft mir aber leider garnichts.
      Lies meinen Beitrag evtl etwas genauer...
      Danke, Typhox

      1. Hi!

        Ungefähr ja, Es hilft mir aber leider garnichts.
        Lies meinen Beitrag evtl etwas genauer...

        Wow! Du fragst, wie hier normalerweise geantwortet wird! Da bin ich mal neugierig, was draus wird.

        --
        Trau Dich!
         
      2. Hallöchen,

        Hab ich.

        Lies meinen Beitrag evtl etwas genauer...

        Das interpretiere ich jetzt so:
        Beim Aufruf von script.php direkt wird abc.php eingebunden.
        ABER
        Beim Aufruf von script.php über /scripts/script.php wird abc.php eingebunden, es müsste aber die /scripts/abc.php sein.

        [...Wenn ich in einer Datei zum Beispiel stehen hab "include 'abc.php'" (also 'ne relative Angabe) ...]

        Dann schreib dort (in die script.php) z.B. hin:

        if(!isset($IncludeOrdner))  
          $IncludeOrdner = '';  
        include($IncludeOrdner.'abc.php');
        

        Da beim direkten Aufruf $IncludeOrdner undefiniert ist, nimmt include() die abc.php in dem Ordner, wo die script.php steht.

        [...und rufe die Datei aus einem anderen Ordner via include "/skripts/skript.php" auf...]

        Und hier schreibst du:

        $IncludeOrdner = 'skripts/';  
        for($i=0; $i<5; $i++) {   // die 5 beschränkt die Suche auf 5 Ebenen aufwärts  
          if(!is_dir($IncludeOrdner)) {  
          $IncludeOrdner='../'.$IncludeOrdner;  
          }  
          else {  
            break;  
          }  
        }  
        include($IncludeOrdner.'script.php');
        

        Rufst du von woanders her auf, ist $IncludeOrdner definiert mit der Pfadangabe, die script.php relativ zur aufrufenden Datei macht.
        Da $IncludeOrdner jetzt gesetzt ist, ist die abc.php im include ebenfalls relativ zur aufrufenden Datei.
        Eine abc.php im gleichen Ordner wie die aufrufende Datei wird jetzt ignoriert.

        MfG
        vaudi