Rolf B: HTML Menü mit php include einbinden und relative Pfade nutzen

Beitrag lesen

Hallo ebody,

da die menu.html aus Sicht des Browsers gar nicht existiert, sondern als Teil von (beispielsweise) /index.php, /foo/data.php und /bar/baz/info.php ausgeliefert wird, hast Du keine Chance, das allein in menu.html zu lösen.

Ich hatte das Problem in einer mit Klassen organisierten PHP Anwendung auch. Da gab es im Wesentlichen eine Einstiegsseite, die auf www.example.org/foo/test.php zu finden war, und wenn ich lokal getestet habe, war es localhost:8080/test.php.

Meine beiden Lösungen sehen so aus:

Das kann man konfigurationsfrei lösen. Du brauchst dafür folgende Informationen:

  • wo im Filesystem des Servers liegt das Root-Verzeichnis des Web
    Das kann menu.php mit Hilfe von FILE ermitteln, wenn es die Minimalinformation hat, wo es sich selbst relativ zum Web-Root befindet. Liefert FILE beispielsweise den String /usr/web/ebody/testapp/de/include/menu.php, dann kann menu.php wissen, dass das Projekt in /usr/web/ebody/testapp liegt.
  • wo, relativ zum lokalen Root-Verzeichnis, liegt die aufgerufene PHP Datei
    Hier kommt $_SERVER['SCRIPT_FILENAME'] ins Spiel. Darin steht, welche PHP Datei der Webserver gestartet hat, als lokaler Pfad auf dem Server. Es könnte zum Beispiel /usr/web/ebody/testapp/demo1/page.php sein. menu.php entfernt den Root-Ordner und weiß nun: /demo1/page.php wurde aufgerufen.
  • Daraus gewinnt man die Information, wieviele Ordner tief die aufgerufene PHP Seite liegt, und kann die richtige Anzahl von ../ vor die Ressourcenpfade setzen.

Eine Lösung mit Konfigurationsdatei ist, das Web-Root in einer include-Datei abzulegen, die nicht mit deployed wird. Um diese include-Datei finden zu können, müssen die includenden PHPs aber auch wissen, wo sie sich im Web-Baum befinden. Oder Du verwendet den include_path.

<?php 
$ServerSetup = ARRAY('WWW-Root' => '/test1'):

Diese Datei kann menu.php includen, oder Du includest die Datei in allen Einstiegsscripten und verwendest $ServerSetup (oder wie auch immer Du sie nennen magst) als globale Variable. Bei Bedarf setzt Du dann $ServerSetup['WWW-Root'] als Präfix für alle Ressourcen-URLs.

Rolf

--
sumpsi - posui - obstruxi