Nick: Pfanangaben automatisch verzeichnisspezifisch anpassen

Tja, das ist wohl eine der einfachsten Fragen, dies gibt...

Wenn ich im Hauptverzeichnis einen Befehl gebe, dass mir PHP in eine externe Datei in einem Unterverzeichnis folgendes schreibt:

"<a href='../../irgendeinedatei.php'>blablaLINK</a>"

schreibt er das ja erstmal korrekt.

Wenn ich die Datei dann aber von weiteren Unterverzeichnissen mittels "include"-Befehl miteinbeziehe, wird der Link nicht an das Unterverzeichnis angepasst. Er lautet also, auch wenn er 4 Unterverzeichnisse weiter unten in einer Datei ist immer noch

"<a href='../../irgendeinedatei.php'>blablaLINK</a>"

anstatt

"<a href='../../../../../irgendeinedatei.php'>blablaLINK</a>"

Mir ist natürlich klar warum !

Aber gibt es denn keine Möglichkeit, dass PHP den Link verzeichnisspezifisch anpasst??

Und zwar ohne, dass ich gleich die relative Pfadangabe (Also die komplette URL) angeben muss?

Hoffe, jemand kann mir helfen...

THX,Nick.

  1. Hallo Nick,

    Tja, das ist wohl eine der einfachsten Fragen, dies gibt...

    Tja, warum beantwortest du die dir dann nicht selbst? ;-)
    SCNR :-)

    Wenn ich die Datei dann aber von weiteren Unterverzeichnissen mittels "include"-Befehl miteinbeziehe, wird der Link nicht an das Unterverzeichnis angepasst. Er lautet also, auch wenn er 4 Unterverzeichnisse weiter unten in einer Datei ist immer noch

    "<a href='../../irgendeinedatei.php'>blablaLINK</a>"

    anstatt

    "<a href='../../../../../irgendeinedatei.php'>blablaLINK</a>"

    Mir ist natürlich klar warum !

    So? Lass mich auch teilhaben...

    Aber gibt es denn keine Möglichkeit, dass PHP den Link verzeichnisspezifisch anpasst??

    Und zwar ohne, dass ich gleich die relative Pfadangabe (Also die komplette URL) angeben muss?

    Dir ist aber schon der Unterschied zwischen relativ und absolut klar?
    Warum beziehst du deine Links nicht auf das 'document root'?
    Dann bliebe es egal, von wo du die Datei aufrufst.

    Gruß

    Kurt

    --
    "Politiker sagen das, was ankommt, und nicht das, worauf es ankommt."
    (Hans-Olaf Henkel; dt. Industriemanager; geb. 1940)
    http://faq.united-web.at
    http://elektro-dunzinger.at
    http://shop.elektro-dunzinger.at
    1. Hallo Nick,

      Tja, das ist wohl eine der einfachsten Fragen, dies gibt...

      Tja, warum beantwortest du die dir dann nicht selbst? ;-)
      SCNR :-)

      Weil ich es nicht weiss löl.
      Aber ich denke, dass es einfach ist, weil das eigentlich doch viele Seiten haben und ich mir nicht vorstellen kann, dass das so ein komplizierter Vorgang ist...

      1. Hallo Nick,

        Weil ich es nicht weiss löl.
        Aber ich denke, dass es einfach ist, weil das eigentlich doch viele Seiten haben und ich mir nicht vorstellen kann, dass das so ein komplizierter Vorgang ist...

        Ist es auch nicht.
        Ich sagte dir bereits, beziehe alle deine Links auf das document root, dann ist der Ort des Aufrufes unerheblich.
        http://selfhtml.teamone.de/html/allgemein/referenzieren.htm#absolut

        Gruß

        Kurt

        --
        "Politiker sagen das, was ankommt, und nicht das, worauf es ankommt."
        (Hans-Olaf Henkel; dt. Industriemanager; geb. 1940)
        http://faq.united-web.at
        http://elektro-dunzinger.at
        http://shop.elektro-dunzinger.at
        1. Das ist dann aber doch gleich, wie wenn ich die URL komplett angebe, oder?

          Und das habe ich gemacht. Ich habe die serverURL in einer externen Daten.php gespeichert. und die "include" ich dann. Die Variable für die URL lautet:

          $websiteurl

          ($user ist auch in einer externen Datei definiert)
          Der Link lautet:

          <a href='$websiteurl/login/data/memberpics/$user/passbild.jpg'>Bild von $user ansehen</a>

          Aber das geht nicht, weil der schreibt mir dann in die externe Datei die von der Datei ausgehenden Unterverzeichnisse, etc. als relative Pfade... Also gehts wieder net...

          1. Hallo Nick,

            Das ist dann aber doch gleich, wie wenn ich die URL komplett angebe, oder?

            Und das habe ich gemacht. Ich habe die serverURL in einer externen Daten.php gespeichert. und die "include" ich dann. Die Variable für die URL lautet:

            Was heisst für dich "extern"?
            Document_root ist das Wurzelverzeichnis deiner Präsenz, also jenes Verzeichnis, in dem die allererste Seite liegt, die aufgerufen wird, wenn ich deine URL eingebe. Von dort sollten alle Links ausgehen.
            Oder versuche es einfach mal so:

            <?php $DR=getenv('DOCUMENT_ROOT') ?>

            <?php include("$DR/includes/divs/........

            Diese Syntax ist allerdings für die PHP Version 4.0.6 geschrieben, für neuere Versionen gibt es vermutlich eine etwas andere Syntax.
            Nachdem ich auch nicht gerade erfahren im Umgang mit PHP bin, dieses Beispiel bei mir aber seit Jahren funktioniert, sollte es auch bei dir gehen.
            $websiteurl sollte also ausgehend von document_root definiert werden.

            $websiteurl

            ($user ist auch in einer externen Datei definiert)
            Der Link lautet:

            <a href='$websiteurl/login/data/memberpics/$user/passbild.jpg'>Bild von $user ansehen</a>

            Aber das geht nicht, weil der schreibt mir dann in die externe Datei die von der Datei ausgehenden Unterverzeichnisse, etc. als relative Pfade... Also gehts wieder net...

            häh? wie? wo? was?
            Ich versteh nur Bahnhof....

            Gruß

            Kurt

            --
            "Politiker sagen das, was ankommt, und nicht das, worauf es ankommt."
            (Hans-Olaf Henkel; dt. Industriemanager; geb. 1940)
            http://faq.united-web.at
            http://elektro-dunzinger.at
            http://shop.elektro-dunzinger.at
  2. Moin!

    Wenn ich die Datei dann aber von weiteren Unterverzeichnissen mittels "include"-Befehl miteinbeziehe, wird der Link nicht an das Unterverzeichnis angepasst. Er lautet also, auch wenn er 4 Unterverzeichnisse weiter unten in einer Datei ist immer noch

    "<a href='../../irgendeinedatei.php'>blablaLINK</a>"

    anstatt

    "<a href='../../../../../irgendeinedatei.php'>blablaLINK</a>"

    Deine relative Verlinkung funktioniert nicht. Benutze eine absolute Verlinkung (ohne Angabe des Servers).

    Und zwar ohne, dass ich gleich die relative Pfadangabe (Also die komplette URL) angeben muss?

    Relative Links sind solche:

    <a href="andereseite.html">
    <a href="verzeichnis/tiefer/seite.html">
    <a href="../../verzeichnis/hoeher/seite.html">

    Die willst du nicht.

    Absolute Verlinkung bezogen auf den Server wäre sowas:
    <a href="http://www.example.com/verzeichnis/seite.html">
    Das ist unflexibel, wenn man es auf verschiedenen Servern unterbringen will.

    Absolute Verlinkung (serverunabhängig) wäre dies:
    <a href="/verzeichnis/seite.html">
    Damit wird, egal welcher Server genutzt wird, immer die URL "http://www.aktueller-server.test/verzeichnis/seite.html" aufgerufen, egal ob man sich auf "http://www.aktueller-server.test/verzeichnis2/irgendwo/ganz/tief/seite.html" befindet, oder auf "http://www.aktueller-server.test/index.html".

    Dein Problem innerhalb der Links ist kein PHP-Problem, sondern ein HTML-Problem. Der von KD-one gegebene Link ist absolut zielführend gewesen.

    - Sven Rautenberg

    --
    "Beim Stuff für's Web gibts kein Material, was sonst das Zeugs ist, aus dem die Sachen sind."
    (fastix®, 13. Oktober 2003, 02:26 Uhr -> </archiv/2003/10/60137/#m338340>)
  3. Hallo,

    ich habe (glaube ich) das gleiche Problem...

    Bsp.:
    Meine URL ist gga.grosse-erwig.de
    Hier wird jetzt index.php ausgeführt... in ihr (index.php) ist ein Link mit dem ich lucasarts.php wie folgt aufrufe ( /lucasarts/lucasarts.php ). In der Datei lucasarts.php rufe bzw. include ich weitere Dateien aus dem Unterverzeichnis /elemente/inc . Also z.B. /elemente/inc/header.inc.php ... das geht aber nicht, ich muss statt dessen ../elemente/inc/header.inc.php schreiben dann gehts. Nur warum? ../ bedeutet doch in übergeordnete Verzeichnis zu wechseln und / heisst doch vom Rootverzeichnis aus... müsste also in diesem Beispiel das gleiche sein. Was mich verwirrt ist einfach die Tatsache das ich alle Bilder z.B. genau so nämlich mit / vom Root aus einbinde nur bei $require("");, und $include(""); funktioniert das nicht.

    Vielleicht kann mich ja jemand aufklären.

    Grüße - Andre

    1. Moin!

      ../ bedeutet doch in übergeordnete Verzeichnis zu wechseln und / heisst doch vom Rootverzeichnis aus... müsste also in diesem Beispiel das gleiche sein.

      Diese Bedeutung hast du korrekt erkannt. Nur einmal (in HTML-Links) bezieht sich / auf das Root-Verzeichnis der URL, und beim anderen Mal (Include in PHP) bezieht sich / auf das Root-Verzeichnis des Dateisystems.

      Da man den Webserver so konfigurieren muß, dass er _ein_ Verzeichnis des Dateisystems als Root-Verzeichnis der URL nimmt, gilt eben:

      URL          Dateisystem
      /      !=    /
      /      ==    $_SERVER['DOCUMENT_ROOT']

      Was mich verwirrt ist einfach die Tatsache das ich alle Bilder z.B. genau so nämlich mit / vom Root aus einbinde nur bei $require("");, und $include(""); funktioniert das nicht.

      Bilder werden als URL eingebunden. Da gelten, wie oben erwähnt, andere Verzeichnisgrundlagen, als bei Dateizugriffen mittels PHP.

      - Sven Rautenberg

      --
      "Beim Stuff für's Web gibts kein Material, was sonst das Zeugs ist, aus dem die Sachen sind."
      (fastix®, 13. Oktober 2003, 02:26 Uhr -> </archiv/2003/10/60137/#m338340>)
      1. Hallo,

        ... beim anderen Mal (Include in PHP) bezieht sich / auf das Root-Verzeichnis des Dateisystems.

        Das habe ich schon vermutet. Mein (das Beispiel) Problem habe ich jetzt erstmal damit gelöst das ich vorher in des entsprechende Verzeichnis chdir() wechsel. Das ist aber natürlich nur eine Notlösung. Wie macht man soetwas denn üblicherweise? Mein Problem ist das ich im Moment das ganze in einer Subdomain teste ... nachher soll das Projekt aber eine eigene Domain bekommen.

        Vielleicht erbarmt sich ja einer :)

        1. Moin!

          Das habe ich schon vermutet. Mein (das Beispiel) Problem habe ich jetzt erstmal damit gelöst das ich vorher in des entsprechende Verzeichnis chdir() wechsel. Das ist aber natürlich nur eine Notlösung. Wie macht man soetwas denn üblicherweise? Mein Problem ist das ich im Moment das ganze in einer Subdomain teste ... nachher soll das Projekt aber eine eigene Domain bekommen.

          Die Angabe von Document_root geschah nicht zufällig. Da steht drin, welches Verzeichnis auf der Festplatte das Hauptverzeichnis der jeweiligen Domain ist.

          - Sven Rautenberg

          --
          "Beim Stuff für's Web gibts kein Material, was sonst das Zeugs ist, aus dem die Sachen sind."
          (fastix®, 13. Oktober 2003, 02:26 Uhr -> </archiv/2003/10/60137/#m338340>)
          1. Hallo,

            Die Angabe von Document_root geschah nicht zufällig. Da steht drin, welches Verzeichnis auf der Festplatte das Hauptverzeichnis der jeweiligen Domain ist.

            Danke. Ich werde mal sehen was mir am praktibabelsten erseint. Warscheinlich werde ich Document_root als Variablen jeweils bei include und require einfügen. Werde ich jetzt mal testen...

            Also nochmal danke für den Tipp.

            Grüße - Andre Grosse-Erwig

            1. @Sven Rautenberg

              Hallo Sven,

              also ich wollte mich noch mal fix bei dir bedanken.

              Ich habe nämlich den Tag zuvor den halben Tag damit verschwendet mich bei diesem Problem im Kreis zu drehen. Jetzt hat natürlich alles super funktioniert ... hab's nun so gemacht wie im Posting drüber schon beschrieben. (Bin halt noch dabei PHP zu lernen).

              Grüße,
              Andre Grosse-Erwig