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