include findet php-Datei nicht bei Aufruf aus tieferem Ordner
schunteraner
- includes
- php
Hallo, ich stelle mein Web auf php um, um Menüzeile (hauptnav.php) und Fußzeile (fuss2.php) mit ?php include zentral ändern zu können. Auf der Hauptebene klappt es auch (siehe www.schuntersiedlung-online.de/einrichtungen.php, Menü- und Fußzeile sind vorhanden). In der nächsten Unterebene (Ordnerebene) werden hauptnav.php und fuss2.php aber offensichtlich nicht gefunden, obwohl ich sie mit "/hauptnav.php" bzw. "/fuss2.php" auf dem Hauptverzeichnis aufrufe. Ich habe es auch schon mit kompletten Pfadangaben (schuntersiedlung-online.de/hauptnav.php bzw. http://schuntersiedlung-online.de/hauptnav.php) probiert, auch erfolglos. Nur mit "../hauptnav.php" klappt es. Ich würde aber gerne den Befehl auf allen Ordner-Ebenen gleich halten. Der php-Befehl funktioniert offenbar anders als mit html. Hier gibt es mit "/" keine Probleme beim Aufrufen von htm-Dateien. Ich freue mich über Antworten zur Abhilfe. Bin php-Laie. Gruß Jan
Tach!
In der nächsten Unterebene (Ordnerebene) werden hauptnav.php und fuss2.php aber offensichtlich nicht gefunden, obwohl ich sie mit "/hauptnav.php" bzw. "/fuss2.php" auf dem Hauptverzeichnis aufrufe.
Klar. PHP greift ins Dateisystem, und da ist die Wurzel nicht das DocumentRoot.
Ich habe es auch schon mit kompletten Pfadangaben (schuntersiedlung-online.de/hauptnav.php bzw. http://schuntersiedlung-online.de/hauptnav.php) probiert, auch erfolglos.
Dann macht PHP einen Webrequest, statt im Dateisystem eine Datei zu öffnen.
Nur mit "../hauptnav.php" klappt es. Ich würde aber gerne den Befehl auf allen Ordner-Ebenen gleich halten.
Konfigurier den include_path, dann kannst du ohne Vorspann auf alles zugreifen, was dari enthalten ist.
Der php-Befehl funktioniert offenbar anders als mit html. Hier gibt es mit "/" keine Probleme beim Aufrufen von htm-Dateien.
Web-Zugriffe sind auf das DocumentRoot und seine Kinder beschränkt.
dedlfix.
Hello in meine alte Heimat,
damals wohnte ich in der Nordstadt und das Studentenwohnheim an der Schunter war oft meine Wirkungsstätte... Gibt es das noch?
Du kannst die includes auf die Document Root beziehen:
include rtrim($_SERVER{'DOCUMENT_ROOT'},'/') . '/../includes/menu.inc';
Warum den Stammpfad so kompliziert bestimmt?
Die Document Root ist eine Konfigurationseinstellung des Webservers und je nach Geschmack des Admins wir die mal mit abschließendem Slash (nach POSIX wäre das als virtuelles Directory sogar richtig) geschrieben und bei anderen Einrichtungen ohne (leider üblich).
Den Pfad rtrim($_SERVER{'DOCUMENT_ROOT'},'/') . '/../includes/' kannst Du auch in einer Konstanten ablegen, um nicht jedes Mal wieder überlegen zu müssen.
Die Nutzung des Include-Path aus der Konfigurationseinstellung kostet hingegen deutlich Zugriffszeit, da immer erst alle Pfade in der üblichen Reihenfolge nach der Datei durchsucht werden müssen.
Die Verzeichnisstruktur auf dem Server könnte nach obigen Beispiel eventuell so aussehen:
/---+---etc
|
+---var
| +---www
| +---example.org
| | +---htdocs
| | +---data
| | +---sessions
| | +---includes
| | | +---menu.inc
| | | +---footer.inc
| | +---tmp
| | +---log
| +---log
| +—--
| +---
Der expandierte Pfad zur Document Root würde dann
/var/www/example.org/htdocs/
lauten. Die includes lägen außerhalb der Document Root, was meistens zu empfehlen ist, damit sie nicht ohne die Applikation (PHP) per http/s aufgerufen werden können und man leichter Zugangsrechte verwirklichen kann.
Liebe Grüße
Tom S.
Hallo Tom, danke für die ausführliche Antwort. Da ich wie gesagt php-Laie bin, werde ich die einfache Lösung verwenden, den Pfad entsprechend relativ anzupassen. Das Schunterwohnheim, das ich auch aus meiner Studentenzeit kenne, gibt es übrigens durchaus noch, inkl. Kneipe und Kino. Dort geht inzwischen mein Sohn hin… Gruß Jan