Marcus Hammel: includieren mit absoluten Pfadangaben relativ zum Basis-URI

Hallo,

Ich befinde mich auf einer Seite weit innerhalb der Webseite z.B.
/web/xyz/seite.html
Auf dieser Seite möchte ich nun Inhalte einer anderen Datei includieren, die sich in /inc/ befindet und z.b. include.html heißt.

Leider funktioniert
<?php
 include('/inc/include.html');
?>
nicht.

No such file or directory in /web/xyz/seite.html
Er sucht also stets im aktuellen Verzeichnis nach dem Unterverzeichnis /inc/, aber der befindet sich ja im root.

Wie ich ich das nun dennoch lösen?

MfG,
Marcus

  1. Mööp

    Wie ich ich das nun dennoch lösen?

    Schaust du hier: http://de.selfhtml.org/html/verweise/projektintern.htm. Achte besonders auf Punkte im href. Die kannst du auch in PHP-include verwenden.

    zuzuu (sprich: susuu)

    1. Hallo zuzuu,

      Wie ich ich das nun dennoch lösen?
      Schaust du hier: http://de.selfhtml.org/html/verweise/projektintern.htm. Achte besonders auf Punkte im href. Die kannst du auch in PHP-include verwenden.

      gesucht wird aber eine Möglichkeit, um mit absoluten Pfadangaben relativ zum Basis-URI zu referenzieren.

      Gruß,
      André

      1. Hallo,

        gesucht wird aber eine Möglichkeit, um mit absoluten Pfadangaben relativ zum Basis-URI zu referenzieren.

        Da bleibt nur $_SERVER['DOCUMENT_ROOT'] und dann genau hinschauen, ob diese Angaben mit / beendet wurde, oder nicht.

        $base = $_SERVER['DOCUMENT_ROOT'];
          if (substr($base,-1) != '/')
          {
            $base .= '/';
          }

        include($base.$file);

        LG
        Chris

        1. Hi,

          Da bleibt nur $_SERVER['DOCUMENT_ROOT'] und dann genau hinschauen, ob diese Angaben mit / beendet wurde, oder nicht.

          Sie wird ohne beendet.

          Außerdem haben manche Systeme einen "/" als Pfadtrenner. ;)

          Gruß, Cybaer

          --
          Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!
          1. Hallo,

            Da bleibt nur $_SERVER['DOCUMENT_ROOT'] und dann genau hinschauen, ob diese Angaben mit / beendet wurde, oder nicht.

            Sie wird ohne beendet.

            Das hängt davon ab, was in der Konfiguration eingegeben wurde und welches OS verwendet wurde.

            Außerdem haben manche Systeme einen "/" als Pfadtrenner. ;)

            Welche sind das denn?

            "Under Windows, separate the directories with a semicolon"

            Ich kenne da nur ; und :
            Und außerdem hat das nichts in der Variable $_SERVER['DOCUMENT_ROOT'] zu suchen.

            LG
            Chris

            1. Hi,

              Da bleibt nur $_SERVER['DOCUMENT_ROOT'] und dann genau hinschauen, ob diese Angaben mit / beendet wurde, oder nicht.
              Sie wird ohne beendet.
              Das hängt davon ab, was in der Konfiguration eingegeben wurde

              Du meinst, ob "falsch oder richtig" konfiguriert wurde? Das mag sein. :)

              und welches OS verwendet wurde.

              Welches OS setzt denn ein "/" hinter Pfade?

              Außerdem haben manche Systeme einen "/" als Pfadtrenner. ;)
              Welche sind das denn?

              OK, wenn du es nicht aus dem Kontext heraus verstehst, schreibe ich auch gerne "Verzeichnistrenner" statt "Pfadtrenner". :)

              Gruß, Cybaer

              --
              Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!
              1. Hallo,

                Du meinst, ob "falsch oder richtig" konfiguriert wurde? Das mag sein. :)

                Richtig[tm] wäre es, Verzeichnisse immer mit einem / ( oder auch \ ) abzuschließen. Das wird nur leider nicht konsequent eingehalten.

                Außerdem haben manche Systeme einen "/" als Pfadtrenner. ;)
                Welche sind das denn?

                OK, wenn du es nicht aus dem Kontext heraus verstehst, schreibe ich auch gerne "Verzeichnistrenner" statt "Pfadtrenner". :)

                Das ist auch besser so. Denn Pfadtrenner ist das Zeichen, das unterschiedliche Pfade voneinander trennt, Verzeichnistrenner dasjenige, dass die Verzeichnisstufen innerhalb eines Pfades voneinander trennt.

                Jedenfalls gibt es ggf. Probleme, wenn man

                /teil1/teil2//teil3/datei

                erzeugt.

                LG
                Chris

                1. Hi,

                  Du meinst, ob "falsch oder richtig" konfiguriert wurde? Das mag sein. :)
                  Richtig[tm] wäre es, Verzeichnisse immer mit einem / ( oder auch \ ) abzuschließen. Das wird nur leider nicht konsequent eingehalten.

                  Na gottseidank, da dieses Verhalten *falsch* wäre - jedenfalls nicht Posix-konform! Und ich würde mal einfach behaupten, daß die Mehrzahl der Webserver auf Posix-konformen OS' läuft, oder? 8-)

                  Bliebe noch Windows - aber da hängt man wohl kaum ein "/" an die Pfade. ;-)

                  Darüberhinaus kenne ich allerdings auch keine Windows-Internetserver, die in solchen Fällen ein "" an den Pfad anhängen.

                  Was noch bleibt: Meine unbeantwortete Frage, welches Betriebssystem da ein "/" anhängt. Wir wissen ja nun, daß Unixoide und Windows ausscheiden. :)

                  Das ist auch besser so. Denn Pfadtrenner ist das Zeichen, das unterschiedliche Pfade voneinander trennt, Verzeichnistrenner dasjenige, dass die Verzeichnisstufen innerhalb eines Pfades voneinander trennt.

                  Ja, ja, hast ja Recht! :-)

                  Auch wenn hier ohnehin nur von Verzeichnisstufen überhaupt die Rede war, von unterschiedlichen Pfaden allerdings nicht. :) Aber es sei dir ja wirklich gegönnt. :-))

                  Gruß, Cybaer

                  --
                  Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!
                  1. Hallo,

                    da kann man mal wieder sehen, das POSIX auch nicht logisch ist *g*

                    Auch wenn hier ohnehin nur von Verzeichnisstufen überhaupt die Rede war, von unterschiedlichen Pfaden allerdings nicht. :) Aber es sei dir ja wirklich gegönnt. :-))

                    Danke,
                    aber mit gönnen hat das nix zu tun, sondern nur mit Pferden (die vor der Apotheke...)

                    Wenn man Scripte für fremde Webserver schreibt, sollte man auf den abschließenden / auf jeden Fall prüfen.

                    LG
                    Chris

                    1. Hi,

                      Wenn man Scripte für fremde Webserver schreibt, sollte man auf den abschließenden / auf jeden Fall prüfen.

                      Das tue ich - und prüfe i.d.R. nicht (also explizit nicht bei Variablen wie $_SERVER).

                      Wenn ich das wirklich tun müßte, dann wäre mir also schon dran gelegen, es zu wissen. =;-)

                      Ich prüfe aber, wenn ein User einen Pfad selbst eingeben kann. Die wenigstens User sind Posix-konform ... ;-)

                      Gruß, Cybaer

                      --
                      Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!
  2. Hi,

    Er sucht also stets im aktuellen Verzeichnis nach dem Unterverzeichnis /inc/, aber der befindet sich ja im root.

    Nein und nein. Weder sucht er im aktuellen Verzeichnis nach /inc/ (sondern er sucht absolut von der Root ausgehend), noch befindet sich /inc/ bei dir im Root (dann würde er es finden. /inc/ befindet sich wohl im Document Root. Also:

    include($_SERVER['DOCUMENT_ROOT].'/inc/include.html');

    Gruß, Cybaer

    --
    Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!