mysqlfan: Pfade außerhalb des PHP-Verzeichnisses einbinden

Hallo!

PHP-Dateien lassen sich ja nur im entsprechenden PHP-Ordner auf dem Lokal-PC ausführen.
Wie ist das mit Links bzw. absoluten Pfaden?

Ich würde gerne Bilder in php-Dateien einfügen, die in Verzeichnissen auf der Festplatte sind.

<A HREF="C:\Users\Username\Documents\Content\companylogos"><img alt="".$abc['companynumber']."" src="".$abc['companynumber'].".jpg"></A>

--> Das Bild wird nicht angezeigt.

img alt="".$abc['companynumber'].""  bewirkt allerdings, dass die Zahl ausgelesen wird und statt alt dort steht, aber auf die Grafik wird nicht verlinkt.

Kann man mit PHP keine Bilder über Pfade darstellen? Eigentlich setzt PHP mit der Verlinkung doch nur eine HTML-Anweisung, um, oder?

Für die Weiterhilfe vielen Dank

  1. Hi,

    <A HREF="C:\Users\Username\Documents\Content\companylogos"><img alt="".$abc['companynumber']."" src="".$abc['companynumber'].".jpg"></A>

    der absolute Pfad im Dateisystem deines Host-Rechners, interessiert den Client relativ wenig, bzw. er kann nichts damit anfangen.

    Siehe: absoluten Pfadangaben relativ zum Basis-URI referenzieren

  2. Hi!

    PHP-Dateien lassen sich ja nur im entsprechenden PHP-Ordner auf dem Lokal-PC ausführen.

    Jein. Mit einer 0815-Webserver-Konfiguration müssen nur die per Browserrequest gestarteten Dateien innerhalb des DocumentRoots liegen. Zu inkludierende PHP-Code-Dateien oder zu öffnende Datendateien können außerhalb des DocumentRoot liegen - was sich auch empfiehlt, wenn man keinen direkten Zugriff darauf haben will.

    Wie ist das mit Links bzw. absoluten Pfaden?

    Der Browser stellt ganz normale Requests nach diesen Dateien. Das heißt, sie müssen für ihn "sichtbar" sein - was wiederum bedeutet, dass sie im DocumentRoot liegen müssen.

    Ich würde gerne Bilder in php-Dateien einfügen, die in Verzeichnissen auf der Festplatte sind.

    Wenn sich diese außerhalb des DocumentRoots befinden, kann ein Browser mit keinen HTML-Mitteln auf sie zugreifen. Dann benötigst du ein Wrapper-Script, welches innerhalb des DocumentRoots liegend einen Parameter entgegennimmt und dann die angeforderte Datei ausliefert. Dieses Script sollte man so schreiben, dass nur auf genau definierte Verzeichnisse zugegriffen werden kann und man darüber nicht beliebige Systemdateien abfragen kann.

    <A HREF="C:\Users\Username\Documents\Content\companylogos"><img alt="".$abc['companynumber']."" src="".$abc['companynumber'].".jpg"></A>
    --> Das Bild wird nicht angezeigt.

    PHP-Code ist für den Browser nicht interessant. Was sieht der Browser und kann er daraus einen Request in Richtung Server erstellen? C: ist aus seiner Sicht seine eigene Festplatte, so er unter Windows läuft.

    Kann man mit PHP keine Bilder über Pfade darstellen? Eigentlich setzt PHP mit der Verlinkung doch nur eine HTML-Anweisung, um, oder?

    Lerne, Dinge aus verschiedenen Perspektiven zu betrachten. PHP beziehungsweise der Webserver ist eine, der Browser eine andere. Mach dir zuerst Gedanken, was den Browser betrifft, ohne den Webserver zu berücksichtigen, dann überleg dir, wie du die Dokumente, so wie der Browser sie braucht, in seinen Techniken erstellen kannst - also HTML, CSS und Javascript. Anschließend kannst du dich daran setzen, diese Dokumente mit PHP zusammenzusetzen.

    Lo!

  3. @dedlfix und Krueger: Schon mal danke für die Antworten.

    Ich habe als DocumentRoot per default C:/xampp/htdocs eingetragen.
    Da ich das so lassen möchte, habe ich die Bilder nun in Unterordner von htdocs gemacht.
    Geht das oder lassen sich ausschließlich Dateien aus dem direkten DocumentRoot-Pfad aufrufen?

    Wie muss die httpd.conf abgeändert werden, damit zwei Pfade als DocumentRoot gelten oder zumindest der bestehende Pfad um Unterordner ergänzt wird?

    Über Google finde ich immer nur, wie man den DocumentRoot ändert.
    Ich brauche aber eben mehrere Pfade.

    1. Hi!

      @dedlfix und Krueger: Schon mal danke für die Antworten.

      Ich habe als DocumentRoot per default C:/xampp/htdocs eingetragen.
      Da ich das so lassen möchte, habe ich die Bilder nun in Unterordner von htdocs gemacht.
      Geht das oder lassen sich ausschließlich Dateien aus dem direkten DocumentRoot-Pfad aufrufen?

      Das DocumentRoot ist das Verzeichnis, das über http://example.com/ erreicht wird. http://example.com/bilder/ erreicht das Verzeichnis bilder im DocumentRoot-Verzeichnis. (Jedenfalls wenn man URLs 1:1 auf Verzeichisse mappt.)

      Wie muss die httpd.conf abgeändert werden, damit zwei Pfade als DocumentRoot gelten oder zumindest der bestehende Pfad um Unterordner ergänzt wird?

      Es gibt genau ein DocumentRoot.

      Über Google finde ich immer nur, wie man den DocumentRoot ändert.
      Ich brauche aber eben mehrere Pfade.

      Nein, brauchst du nicht. Eine URL mappt genau auf ein Verzeichnis. Wenn du Verzeichnisse von außerhalb des DocumentRoot als virtuelles Unterverzeichnis davon sehen willst, erstell dir einen Alias (Webserver-Konfiguration) oder einen (Sym)Link (Aktion im Dateisystem).

      Lo!

      1. Ich hab jetzt in der httpd.conf eingetragen:

        DocumentRoot "C:/xampp/htdocs/"

        Alias /content/pictures/ "C:/xampp/htdocs/content/pictures/"

        In der php-Datei versuche ich die Bildeinbindung mit:

        <img src=\"content\pictures\"".$abc['companynumber'].".jpg\">

        Leider funktioniert es immer noch nicht.

        Fehlt da irgendwo ein Punkt oder Backslash? Oder ist was grundsätzliches noch falsch?

        1. Hi,

          In der php-Datei versuche ich die Bildeinbindung mit:

          Berücksichtige jetzt bitte ab sofort den Hinweis, dass für Sachen, die auf dem Client stattfinden (und der soll die Bilder schließlich laden und anzeigen) serverseitiger Code uninteressant ist!
          Schau dir den Code an, den der Client erhält.

          <img src=\"content\pictures\"".$abc['companynumber'].".jpg\">

          Also?

          MfG ChrisB

          --
          RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
          1. Ich habe die Abfragezeile

            <img src="content\pictures"".$abc['companynumber'].".jpg">

            geändert in

            <img src="".$abc['companynumber'].".jpg">

            da der Pfad ja schon in der httpd.conf angegeben ist.

            Es läuft leider immer noch nicht.

            Muss Apache nach einer Änderung der httpd.conf neu gestartet werden?

            1. Hi,

              Ich habe die Abfragezeile

              <img src="content\pictures"".$abc['companynumber'].".jpg">

              geändert in

              <img src="".$abc['companynumber'].".jpg">

              da der Pfad ja schon in der httpd.conf angegeben ist.

              Was soll das bedeuten?
              Der Client muss immer noch den Pfad mitgeteilt bekommen, unter dem er die Daten anfordern soll.

              Es läuft leider immer noch nicht.

              Sag mal, bist du dämlich?

              Du sollst dir endlich anschauen, wie der Code aussieht, den der Client erhält! (Und ihn uns zeigen, wenn du dir selber nicht sicher bist, ob er so korrekt ist.)

              Muss Apache nach einer Änderung der httpd.conf neu gestartet werden?

              Ja.

              MfG ChrisB

              --
              RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
              1. Du sollst dir endlich anschauen, wie der Code aussieht, den der Client erhält! (Und ihn uns zeigen, wenn du dir selber nicht sicher bist, ob er so korrekt ist.)

                Und mit welchem Befehl kann ich die Ausgabe des Servers sonst darstellen?

                Ich habe jetzt mal

                if ($_GET) {
                echo '<pre>, print_r ($_GET), '<pre>';
                }

                ausgeführt und Ergebnis ist, dass die id korrekt ausgegeben wird.

                Die anderen SQL-Abfragen auf Basis der übergebenen ID funktionieren ja auch, nur die Bilder werden nicht dargestellt.

                1. Hi,

                  Du sollst dir endlich anschauen, wie der Code aussieht, den der Client erhält! (Und ihn uns zeigen, wenn du dir selber nicht sicher bist, ob er so korrekt ist.)

                  Und mit welchem Befehl kann ich die Ausgabe des Servers sonst darstellen?

                  Du nutzt einfach den Menüpunkt „Quelltext anzeigen“, der irgendwo im Menü deines Browser untergebracht ist ...

                  MfG ChrisB

                  --
                  RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
                  1. Du sollst dir endlich anschauen, wie der Code aussieht, den der Client erhält! (Und ihn uns zeigen, wenn du dir selber nicht sicher bist, ob er so korrekt ist.)

                    Du nutzt einfach den Menüpunkt „Quelltext anzeigen“, der irgendwo im Menü deines Browser untergebracht ist ...

                    Der Tipp war der Entscheidende.
                    Du und dedlfix hatten recht - ich hatte noch nicht gelernt in den Strukturen zu denken, wie das mit Client und Server auf Lokalebene funktioniert. Zumindest nicht richtig verinnerlicht. Sonst hätte ich tatsächlich einfach im Quelltext nachschauen können.

                    Und klar war die HTML-Ausgabe falsch. Schon allein die Backslashes im Pfad waren hier völlig unangebracht. Werden im Internet ja auch nicht als Backslashes dargestellt.
                    Insofern war ich wirklich dämlich. :-)
                    Manchmal hilft der rauhere Ton, damit man das Brett vorm Kopf abnimmt. ^^

                    Jetzt hab ich es so modifiziert, dass die Pfade so wie auf Webebene im Internet im Browser-Quelltext umgesetzt werden - und nun funktioniert es.

                    Daher nochmal allen vielen Dank.

        2. Moin!

          Ich hab jetzt in der httpd.conf eingetragen:

          Und nicht gelesen und verstanden, was das mit Aliassen und DocumentRoot so auf sich hat.

          DocumentRoot "C:/xampp/htdocs/"

          Das ist dein "Hauptverzeichnis".

          Alias /content/pictures/ "C:/xampp/htdocs/content/pictures/"

          Das legt einen Alias an. Wenn in der URL "/content/pictures/" am Anfang steht, wird der Zugriff umgebogen auf das angegebene Verzeichnis...

          Blöd nur, dass dorthin sowieso zugegriffen würde, wenn KEIN Alias angegeben ist. Aliasse brauchst du nur, wenn deine Festplatten-Verzeichnis-Struktur nicht 1:1 der URL-Pfadstruktur entspricht.

          Damit realisiert man z.B. so Dinge wie ein zentrales Bildverzeichnis z.B. mit Icons für mehr als eine Domain. Sowas hast und brauchst du nicht, also weg damit.

          - Sven Rautenberg