Relative Pfade bei include bzw. require in PHP

Bei der Angabe des relative Pfades zur Einbindung von Funktionen aus externen PHP Dateien über include_once oder require_once, kann es zu Problemen kommen.
Folgende Situation:
Wir haben diese Verzeichnisstruktur:

gemeinsam.php
OrdnerA
          a.php
          OrdnerB
                    b.php

Dabei sieht Datei a.php so aus:

require_once ("OrdnerB/b.php");

Und p.php hat folgenden Inhalt:

require_once ("../../gemeinsam.php");

Wenn der Aufruf von a.php erfolgt, dann wird b.php eingebunden und b.php bindet gemeinsam.php ein. Das Problem ist aber, dass der relative Pfad IMMER aus Sicht des aufrufenden Skripts erfolgt – also a.php. Und aus Sicht von a.php existiert der relative Pfad ../../gemeinsam.php nicht!

Die Lösung

Statt des normalen require_once Aufrufs immer folgenden Aufruf verwenden:

require_once( realpath( dirname( __FILE__ ) ).'/../../path/to/file.php');

Der erste Slash ist Absicht und muss (unlogischerweise) dort stehen. Wichtig ist also die Kombination aus den Funktionen realpath und dirname sowie der Konstanten __FILE__.
Realpath verwandelt das Argument aus einem relativen Pfad in einen absoluten. Dirname(__FILE__) gibt das aktuelle Verzeichnis der PHP an. Ab PHP > 5.3 geht auch __DIR__. Und statt der / kann man auch DIRECTORY_SEPARATOR verwenden um OS neutral zu arbeiten.



Kommentare wurden abgeschlossen.