Rolf B: richtige includes in php

Beitrag lesen

Hallo Karl,

wenn Du die innere Struktur deines Projekts veränderst (sprich: ein Script aus Ordner A nach Order B verlegst), dann hast Du immer Anpassungsaufwand, ganz gleich, ob Du dirname(__FILE__) vorschaltest oder nicht.

Der Sinn der Vorschalterei ist ein anderer: Es ist Mikrooptimierung, und der Versuch, Mehrdeutigkeiten zu verhindern. Im Handbuch steht:

Files are included based on the file path given or, if none is given, the include_path specified. If the file isn't found in the include_path, include will finally check in the calling script's own directory and the current working directory before failing.

"none is given" gilt auch für ein include "foo/bar.inc";. Bevor PHP im Script-Verzeichnis oder im aktuellen Verzeichnis sucht, probiert es zunächst den include_path aus. Darin kann natürlich ein "." enthalten sein, das muss aber nicht sein. Wenn es foo/bar.inc bei Dir mehrfach gibt, hängt es an der Reihenfolge der Einträge im include_path, welches davon gefunden wird.

Zweites Problem: Wenn deine vom Browser aufgerufenen Scripte nicht nur im Web-Root stehen, sondern in diverse Unterverzeichnisse verteilt sind, dann wechselt das aktuelle Verzeichnis je nach aufgerufenem Script. Denn das aktuelle Verzeichnis ist immer das, in dem das Script steht, für das der Web-Request ausgeführt wird. Code, der einfach nur mit "." und ".." navigiert, gerät dadurch in Verwirrung.

dirname(__FILE__) verschafft Dir einen sicheren Bezugspunkt, relativ zu der Datei aus der der Include gemacht wird.

Zwingend nötig ist es aber nicht. Es hängt ganz an der Komplexität und an der Struktur deines Projekts. In einem älteren Projekt von mir hatte ich es noch anders gemacht: da habe ich eine globale Variable angelegt, in der der Bezugsordner für Includes stand, und alle Includes darauf basiert. Elegant war das auch nicht. Aber ich hatte dadurch die Option, Sourcecode in andere Ordner zu verschieben, ohne die Pfade zu den Includes anpassen zu müssen. An den include_path hatte ich damals nicht gedacht, da war ich noch zu grün hinter den Ohren.

Rolf

--
sumpsi - posui - obstruxi