relativer Pfad? absoluter Pfad?
hannes
- php
0 ChrisB- html
0 hannes
0 Benjamin Buxbaum0 Ingo Turski0 hannes0 EKKi0 hannes0 Ingo Turski0 ChrisB
Hallo,
Ich habe zwei files (a.php, b.php), die auf unterschiedlichem Verzeichnisniveau liegen.
Beide sollen Inhalt eines dritten files (head.php) per include darstellen.
Das funktioniert auch, wenn ich bei b.php (das ein Niveau tiefer liegt) beim Pfad des zu inkludierenden head.php '../' voranstelle.
Im file head.php aber ist eine Grafik eingebunden, mit absolutem Pfad (Grafik/logo.gif). Diese Grafik wird nun aber nur in a.php angezeigt (a.php ist auf dem gleichen Verzeichnisniveau wie der Grafik-Ordner), nicht in b.php, das ja wie gesagt eine Ebene tiefer im Verzeichnisniveau liegt.
Nun könnte ich ja zwei head.php-files erstellen (mit entsprechend angepassten Verweisen zur Grafikdatei. Aber das beeinhaltet eine mögliche Fehlerquelle (bei späteren Anpassungen müssten die Änderungen an zwei Orten vorgenommen werden); und sehr elegant ist es wohl auch nicht.
Ich finde keine Lösung zu diesem Problem. Hat jemand eine gute Idee?
Gruss
Hi,
Im file head.php aber ist eine Grafik eingebunden, mit absolutem Pfad (Grafik/logo.gif).
Das ist *kein* absoluter Pfad.
Ich finde keine Lösung zu diesem Problem. Hat jemand eine gute Idee?
Verwende einen wirklich absoluten Pfad.
Entweder mit einem vollstaendigen URI inkl. Protokollangabe und Domainname - oder eben eine absolute Pfadangabe relativ zum Basis-URI.
http://de.selfhtml.org/html/allgemein/referenzieren.htm
MfG ChrisB
... oder eben eine absolute Pfadangabe relativ zum Basis-URI.
Ja, so geht das hier auf dem lokalen Rechner, bei meiner Verzeichnisstruktur. Wenn ich aber die Seite auf den Server des Providers hochlade, funktioniert das nicht, weil die Verzeichnisstruktur eine andere ist.
Gibt es denn nicht irgendwie eine Möglichkeit mit $_SERVER['PHP_SELF'] oder $_SERVER['DOCUMENT_ROOT'] oder ähnlich? (Diese beiden Varianten hatte ich schon probiert, aber ohne Erfolg.)
Hi,
... oder eben eine absolute Pfadangabe relativ zum Basis-URI.
Ja, so geht das hier auf dem lokalen Rechner, bei meiner Verzeichnisstruktur. Wenn ich aber die Seite auf den Server des Providers hochlade, funktioniert das nicht, weil die Verzeichnisstruktur eine andere ist.
Berücksichtige meine andere Antwort, dann klappt's auch.
Gibt es denn nicht irgendwie eine Möglichkeit mit $_SERVER['PHP_SELF'] oder $_SERVER['DOCUMENT_ROOT'] oder ähnlich?
letzteres liefert Dir den absoluten Pfad des Startverzeichnisses im Dateisystem des Servers - den brauchst Du für include, wenn Du keine relative Angabe zum aktuellen Verzeichnis machen willst.
freundliche Grüße
Ingo
Hi hannes!
Ich finde keine Lösung zu diesem Problem. Hat jemand eine gute Idee?
Du könntest in a.php und b.php eine Variable mit dem jeweiligen Pfad anlegen und diese dann in head.php vor den Namen der Grafik setzen.
Wobei ich persönlich es vermutlich so halten würde, dass Seiten, die den gleichen Header verwenden, auch im gleichen Verzeichnis liegen. Aber vermutlich hast Du deine Gründe.
mfG
Benjamin
Hi,
Im file head.php aber ist eine Grafik eingebunden, mit absolutem Pfad (Grafik/logo.gif).
das ist ein relativer Pfad.
Diese Grafik wird nun aber nur in a.php angezeigt (a.php ist auf dem gleichen Verzeichnisniveau wie der Grafik-Ordner),
Du meinst direkt darüber?!
Nun könnte ich ja zwei head.php-files erstellen (mit entsprechend angepassten Verweisen zur Grafikdatei. Aber das beeinhaltet eine mögliche Fehlerquelle (bei späteren Anpassungen müssten die Änderungen an zwei Orten vorgenommen werden); und sehr elegant ist es wohl auch nicht.
Ich finde keine Lösung zu diesem Problem. Hat jemand eine gute Idee?
Du kannst absolute Pfade angeben. Wobei Du unterscheiden musst zwischen dem Dateisystem und dem HTTP-Server. Include nutzt die Verzeichnisse des Dateisystems und HTTP das eingestellte Startverzeichnis der Domain als Root. Ein über HTML eingebundes Bild http://example.org/Grafik/logo.gif kannst Du demnach so addressieren: "/Grafik/logo.gif".
freundliche Grüße
Ingo
Guten Tag Ingo,
Diese Grafik wird nun aber nur in a.php angezeigt (a.php ist auf dem gleichen Verzeichnisniveau wie der Grafik-Ordner),
Du meinst direkt darüber?!
a.php liegt hier: http://example.org/a.php
b.php liegt hier: http://example.org/sub/b.php
head.php liegt hier: http://example.org/head.php
logo.gif liegt hier: http://example.org/Grafik/logo.gif
...kannst Du demnach so addressieren: "/Grafik/logo.gif".
Das habe ich ohne Erfolg probiert.
Auch über den Vorschlag von Benjamin Buxbaum
Du könntest in a.php und b.php eine Variable mit dem jeweiligen Pfad anlegen und diese dann in head.php vor den Namen der Grafik setzen.
habe ich nachgedacht. Ich komme einfach nicht zum gewünschten Ziel.
Mahlzeit,
a.php liegt hier: http://example.org/a.php
b.php liegt hier: http://example.org/sub/b.php
head.php liegt hier: http://example.org/head.php
logo.gif liegt hier: http://example.org/Grafik/logo.gif...kannst Du demnach so addressieren: "/Grafik/logo.gif".
Das habe ich ohne Erfolg probiert.
Tut mir leid, aber das kann ich nicht glauben. Wenn "logo.gif" in einem Verzeichnis namens "Grafik" liegt, das direkt im DOCUMENT_ROOT existiert, dann MUSS eine absolute Pfadangabe wie <img src="/Grafik/logo.gif"> funktionieren - oder aber Dein Webserver ist total verkonfiguriert ...
MfG,
EKKi
Hallo EKKi,
Tut mir leid, aber das kann ich nicht glauben.
Damit hast du möglicherweise recht. Ich glaube, ich habe das ganze immer noch nicht ganz begriffen. Die Pfadangaben sind so:
a.php liegt hier: http://localhost/Bsp2/[example.org]/a.php
b.php liegt hier: http://localhost/Bsp2/[example.org]/sub/b.php
head.php liegt hier: http://localhost/Bsp2/[example.org]/head.php
logo.gif liegt hier: http://localhost/Bsp2/[example.org]/Grafik/logo.gif
Nach Fertigstellung soll alles, was jetzt in 'example.org' liegt (das ist ein Ordner) in das root-Verzeichnis beim Provider ('public_html' oder 'www' oder wie das dann dort heisst) kommen.
Hi,
Damit hast du möglicherweise recht. Ich glaube, ich habe das ganze immer noch nicht ganz begriffen. Die Pfadangaben sind so:
a.php liegt hier: http://localhost/Bsp2/[example.org]/a.php
aha, Du testest offline! Und Dein Server hat vermutlich XAMPP als Startverzeichnis eingestellt?
Nach Fertigstellung soll alles, was jetzt in 'example.org' liegt (das ist ein Ordner) in das root-Verzeichnis beim Provider ('public_html' oder 'www' oder wie das dann dort heisst) kommen.
dort wird es dann auch funktionieren.
freundliche Grüße
Ingo
Hi,
Die Pfadangaben sind so:
a.php liegt hier: http://localhost/Bsp2/[example.org]/a.php
b.php liegt hier: http://localhost/Bsp2/[example.org]/sub/b.php
head.php liegt hier: http://localhost/Bsp2/[example.org]/head.php
logo.gif liegt hier: http://localhost/Bsp2/[example.org]/Grafik/logo.gifNach Fertigstellung soll alles, was jetzt in 'example.org' liegt (das ist ein Ordner) in das root-Verzeichnis beim Provider ('public_html' oder 'www' oder wie das dann dort heisst) kommen.
Warum machst du dir das Leben so schwer, in dem du deine Testumgebung so suboptimal aufsetzt?
Je besser eine Testumgebung die Realitaet widerspiegelt, desto einfacher ist doch alles.
Lege dir also einen VirtualHost an, dessen DocumentRoot direkt auf das Verzeichnis "/example.org/" zeigt, und dazu noch einen darauf verweisenden lokalen Hostnamen, wie bspw. example.org.local - und rufe dann deine Testseiten einfach darueber auf.
MfG ChrisB