Marko: Include und relative Pfade

Hallo,

Immer, wenn ich eine html-Datei mit Include() einfüge, werden die Bilder darin nicht mehr angezeigt, weil der relative Pfad nicht mehr gefunden wird, da wie php-Datei nicht im selben Verzeichnis steht wie die eingefügte Datei.

Gibt es einen Weg, dass eine eingefügte Datei korrekt angezeigt wird (mit allen Bildern)? Alle Pfäde anpassen kann ich nicht, da die Datei in verschiedenen php-Dateien eingefügt wird.

Gruss, Marko

  1. Hallo Freunde des gehobenen Forumsgenusses,

    Gibt es einen Weg, dass eine eingefügte Datei korrekt angezeigt wird (mit allen Bildern)? Alle Pfäde anpassen kann ich nicht, da die Datei in verschiedenen php-Dateien eingefügt wird.

    Du musst die _Pfade_ trotzdem anpassen, und zwar musst du absolute Pfade
    (beginnen mit einem Slash, ausgehend von Document Root) angeben.

    Gruß
    Alexander Brock

    --
    [latex]\lim_{3 \to 4}{\sqrt{3}} = 2[/latex]
    1. Hello,

      Gibt es einen Weg, dass eine eingefügte Datei korrekt angezeigt wird (mit allen Bildern)? Alle Pfäde anpassen kann ich nicht, da die Datei in verschiedenen php-Dateien eingefügt wird.

      Du musst die _Pfade_ trotzdem anpassen, und zwar musst du absolute Pfade
      (beginnen mit einem Slash, ausgehend von Document Root) angeben.

      Für die Bilder eher ausgehend vom Host also $_SERVER['HTTP_HOST'], den man aber in der Imagesource nicht angeben muss, da er vom Browser selbsttätig ergänzt wird.

      Harzliche Grüße vom Berg
      esst mehr http://www.harte-harzer.de

      Tom

      --
      Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
      Nur selber lernen macht schlau
  2. Hello Marko,

    die Bilder werden doch wahrscheinlich vom Browser als Subrequest der ausgelieferten HTML-Seite angefordert, oder?

    Schau Dir also den ausgelieferten Quelltext am Browser an.

    Die Bilder kannst Du dann in den entsprechenden Dateien absolut zur Domain referenzieren

    $_SERVER['HTTP_HOST'] ist Dein Freund.
      ist dasselbe, als würdest Du nur '/bilder/img1.jpg' schreiben, wenn /bilder/ das
      Verzeichnis dafür innerhalb der Domain ist.

    und wo die Bilder relativ zur Stamm-URL Deiner Domain liegen, wirst Du ja wissen, oder?

    Du musst jedoch immer zwischen Server mit Dateisystem und Client mit URi unterscheiden.

    Harzliche Grüße vom Berg
    esst mehr http://www.harte-harzer.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau
  3. Hiho,

    es wird dir nicht so viel übrig bleiben. Das Problem ist das PHP Serverseitig arbeitet Bilder aber vom Client angefordert werden. Sprich PHP setzt zuerst die Seite zusammen und sendet sie dann an den Browser. Dieser weiss dann gar nichts davon das da vorher irgendwas includet wurde und schon gar nicht das die Ursprungsdatei in einem anderen Ordner lag. Du hast nun mehrer Möglichkeiten:

    1.) Deine Haupt PHP Datei so zu legen das die Pfade in der includeten stimmen (also sprich in den selben ordner)
    2.) Alle Pfade in der includeten anpassen. Das sollte eigentlich kein grosses Problem sein und mit einem einfachen Suchen & Ersetzten durch, das jeder bessere Texteditor kann, machbar sein
    3.) Du kannst mit <base href="Irgend ein absoluter Pfad"> das "Startverzeichniss" bestimmen vondem aus der Browser zu suchen beginnt. Also wenn deine Bilder in bilder/bilder_neu/ liegen und in deiner eingefügten PHP_Datei nur ein "bilderneu/bild.gif" steht kannst du ein <base href="/bilder/"> einfügen und die Bilder werden gefunden ohne das du alle Pfade ändern musst. Beachte aber das dies wirklich für ALLE Pfade gilt. also alle Bilder, alle CSS Dateien, alle Scripte, alle Flash-Dateien und alles was du sonst noch so in der fertigen (also sprich nach der Bearbeitung durch PHP zurückgegebenen) Seite drinne stehen hast.

    Marc

    1. Hi,

      3.) Du kannst mit <base href="Irgend ein absoluter Pfad"> das "Startverzeichniss" bestimmen vondem aus der Browser zu suchen beginnt.

      Das hört sich super an, aber funktioniert das auch mit jedem Browswer?

      Gruss, Marko

      1. Hello,

        3.) Du kannst mit <base href="Irgend ein absoluter Pfad"> das "Startverzeichniss" bestimmen vondem aus der Browser zu suchen beginnt.

        Das hört sich super an, aber funktioniert das auch mit jedem Browswer?

        Welche Referenzen stimmen denn nicht?

        • Die Pfade der Datein auf der Serverseite
        • Die Ressource-Angaben beim Client?

        Wer ist verantwortlich für das "Nichtfinden" von Dateien oder Ressourcen?

        Harzliche Grüße vom Berg
        esst mehr http://www.harte-harzer.de

        Tom

        --
        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
        Nur selber lernen macht schlau
        1. Hi,

          Welche Referenzen stimmen denn nicht?

          • Die Pfade der Datein auf der Serverseite
          • Die Ressource-Angaben beim Client?

          Die Pfade auf der Serverseite, der Client hat damit nichts zu tun.

          Beispiel für eine Ordnerstruktur

          a
          a/x.php
          a/b/z.php
          a/b/c/img.gif
          a/b/c/y.htm

          Wenn x.php oder z.php y.htm includet, und y.htm ein Bild referenziert mit <img src="img.gif">, wird es nicht angezeigt, da von x.php aus gesehen es b/c/img.gif bzw. c/img.gif heissen müsste, und nicht bloss img.gif. Verstehst Du? :P

          Gruss, Marko

          1. Hello,

            Wenn x.php oder z.php y.htm includet, und y.htm ein Bild referenziert mit <img src="img.gif">, wird es nicht angezeigt, da von x.php aus gesehen es b/c/img.gif bzw. c/img.gif heissen müsste, und nicht bloss img.gif. Verstehst Du? :P

            Das ist aber kein Pfad im Dateisystem des Servers, sondern ein Teil einer URL. Die kann Dank diverser "Verbiegetechniken" ganz anders aussehen, als der Dateipfad auf dem Server.

            Es gibt

            - $_SERVER['HTTP_HOST']
            und
              - $_SERVER['DOCUMENT_ROOT']

            die beiden solltest Du DIr mal ansehen und dann dazu die Funktion

            realpath() http://de2.php.net/manual/de/function.realpath.php

            die aber nur dann ein Ergebnis ungleich false liefert, wenn der Pfad überhaupt vorhanden ist.

            Harzliche Grüße vom Berg
            esst mehr http://www.harte-harzer.de

            Tom

            --
            Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
            Nur selber lernen macht schlau
      2. Hiho,

        Das hört sich super an, aber funktioniert das auch mit jedem Browswer?

        ganz sicher nicht :) Ich kenne nichts, das mit *jedem* Browser funktioniert.
        Zumindest die 3 grossen (Gecko-Engine, IE 5 und Opera 7) machen es auf jeden Fall. Ausserdem weiss ich noch vom Konquerer (keine Ahnung welche Version) das er es mitmacht. Was niedrigere Versionen und andere Browser angeht - keine Ahnung. hab ich nicht getestet.

        Marc