Erri: DocRoot serverseitig in Variable zur Verfügung stellen

Guten Morgen an alle im Forum,

auf meiner Website benötige ich des Öfteren (auf jeder Seite) den DocumentRoot meiner Domain. Diesen gebe ich auf meinem Lokalem Webserver (logischer Weise) folgendermaßen aus:
echo $_SERVER['document_root']; ...

Nun ist es leider so, dass ich den DocumentRoot bei meinem Provider NICHT über das Array $_SERVER holen kann, sondern (lt. meines Providers) so vorgehen muss:
echo preg_replace("/^((/.[^/]*){7}).*/", "$1/", $SCRIPT_FILENAME, 1);

Folglich müsste ich dies vor jedem Upload von meinem lokalem Webserver auf den meines Providers (zumindest 1x) in jeder Datei ändern...
Um mir diese Arbeit zu ersparen, suche ich eine Möglichkeit, den DocumentRoot (auf meinem lokalem Webserver) serverseitig in eine Variable (im Beispiel $SCRIPT_FILENAME) zu schreiben.

Weiß jemand von euch, ob und wenn ja wie dies funktioniert?
Oder gibt es sogar eine bessere Lösungs-Variante für mein Problem?

Ich danke euch vielmals für die Hilfe
Gruß
Erri

  1. hi,

    Nun ist es leider so, dass ich den DocumentRoot bei meinem Provider NICHT über das Array $_SERVER holen kann, sondern (lt. meines Providers) so vorgehen muss:
    echo preg_replace("/^((/.[^/]*){7}).*/", "$1/", $SCRIPT_FILENAME, 1);

    Oder gibt es sogar eine bessere Lösungs-Variante für mein Problem?

    such dir einen anderen provider.

    eine notwendigkeit für obiges preg_replace-gehampel ist nicht erkennbar.
    wenn dein provider probleme damit hat, PHP vernünftig zu konfigurieren - dann schleunigst weg da.

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
    1. Hi wahsaga,

      such dir einen anderen provider.

      eine notwendigkeit für obiges preg_replace-gehampel ist nicht erkennbar.
      wenn dein provider probleme damit hat, PHP vernünftig zu konfigurieren - dann schleunigst weg da.

      Das sehe ich genauso und die Idee hatte ich auch schon vor längerer Zeit...
      Allerdings habe ich noch bis August Vertragsbindung. Ich kann zwar kündigen, allerdings würde ich dann die restlichen Beiträge nicht erstattet bekommen... Und Geld verschenken möchte ich auch nicht.

      Naja, dann bleibt mir wohl nichts anderes übrig, als es von Hand zu ändern. Bloß, mein Provider machts doch auch irgendwie, sonst würde ja bei dem "preg_replace-gehampel" (wie du so schön schreibst) keine Ausgabe kommen.?

      Danke und Gruß
      Erri

      1. Wo wir gerade bei einem Providerwechsel waren...

        Welchen Provider könnt ihr mir empfehelen?
        Mir ist bei der Suche Folgendes wichtig:
        1. "vernünftige" PHP-Konfiguration (um o.g. Probleme zu vermeiden)
        2. DocumentRoot einer Domain sollte möglichst (bei Bedarf) auf einen verschiedene Webspace-Ordner zeigen können*
        3. möglichst keine Beschränkungen beim MySQL-DB-Größe**
        4. Server-Ausfallsicherheit
        5. und schließlich ein vernünftiges Preis-Leistungs-Verhältnis (was bei meinem jetzigem Provider meiner Meinung nach nicht mehr gegeben ist)

        Ich habe mich mal bei www.evanzo.de umgeschaut... Das "EVANZO WEB SX"-Paket klingt meiner Meinung nach nicht schlecht --> 500MB Webspace, 3 Domains... für 5€/Monat (nur das Punkt 2. meiner Kriterien leider nicht zutrifft [außer bei dem Produkt: VirtualServer])

        * Für den Update meiner Homepage möchte ich gern den DocumentRoot vorrübergehend auf einen anderen Ordner zeigen lassen, in dem ich meinen Besuchern einen entsprechenden Update-Hinweis anzeigen kann...

        ** Zurzeit habe ich bei der DB-Größe nur 10% des Webspaces (dies finde ich echt Sch****)

        Vielen Dank und Viele Grüße
        Erri

        1. Hi Erri,

          Ich habe mich mal bei www.evanzo.de umgeschaut... Das "EVANZO WEB SX"-Paket klingt meiner Meinung nach nicht schlecht --> 500MB Webspace, 3 Domains... für 5€/Monat (nur das Punkt 2. meiner Kriterien leider nicht zutrifft [außer bei dem Produkt: VirtualServer])

          Suche mal hier im Archiv - ich habe da irgendwie eine Menge negatives zu (L)Evanzo im Kopf (Evanzo == Levanzo).

          MfG, Dennis.

          --
          Mein SelfCode: ie:{ fl:( br:> va:) ls:[ fo:) rl:( n4:# ss:) de:] js:| ch:{ sh:( mo:} zu:|
          Sinnvolles Zitieren: Man zitiert nur Teilsätze des Vorposters auf die man sich bezieht! Nicht einfach alles.
  2. Hallo

    DocumentRoot meiner Domain. Diesen gebe ich auf meinem Lokalem Webserver (logischer Weise) folgendermaßen aus:
    echo $_SERVER['document_root']; ...

    Warum machst du nicht einfach ein $documentroot = "/x/y/z/" irgendwo in deinem Script?
    Oder versteh ich hier was falsch?

    Gruss

    Casper

    1. Hallo Casper,

      Warum machst du nicht einfach ein $documentroot = "/x/y/z/" irgendwo in deinem Script?

      Das mache ich ja zurzeit so, allerdings nervt es mich, jedesmal vor dem Upload auf den Webspace, den Pfad in allen Dateien zu verändern...

      Gruß
      Erri

      1. Hallo Erri,

        Das mache ich ja zurzeit so, allerdings nervt es mich, jedesmal vor dem Upload auf den Webspace, den Pfad in allen Dateien zu verändern...

        dann setz die Variable doch in Abhängigkeit von $_SERVER['HTTP_HOST'] ...

        Grüße aus Nürnberg
        Tobias

        1. Hallo Tobias,

          Das mache ich ja zurzeit so, allerdings nervt es mich, jedesmal vor dem Upload auf den Webspace, den Pfad in allen Dateien zu verändern...
          dann setz die Variable doch in Abhängigkeit von $_SERVER['HTTP_HOST'] ...

          Daran habe ich noch nicht gedacht... Ich habe es gerade probiert und es funktioniert. *freu*

          Merci
          Erri

      2. Hallo

        Das mache ich ja zurzeit so, allerdings nervt es mich, jedesmal vor dem Upload auf den Webspace, den Pfad in allen Dateien zu verändern...

        Das meinte ich eigentlich nicht so. Warum setzt du die Variabel nicht in irgend einer Datei die du dann in allen anderen Dateien einbindest. Sowieso ganz paraktisch.

        Gruss

        Casper

        1. Hi Casper,

          Das meinte ich eigentlich nicht so. Warum setzt du die Variabel nicht in irgend einer Datei die du dann in allen anderen Dateien einbindest. Sowieso ganz paraktisch.

          Ja, das wollte ich auch so lösen... Allerdings muss ich doch beim Include einer Datei auch schon den DocumentRoot angeben, oder?
          Bsp.: include(ROOT.'/includes/docroot.php');
                (ROOT ist bei mir z.Z. eine Konstante, die ich in jeder Datei einmal definiere)

          Danke und Gruß
          Erri

          1. Hi,

            Allerdings muss ich doch beim Include einer Datei auch schon den DocumentRoot angeben, oder?

            Nein.

            Bsp.: include(ROOT.'/includes/docroot.php');

            include('./docroot.php');

            für ein Script, das auf der Root läuft und dort /includes/docroot.php holen soll.

            Aber dedlfix' Lösung ist die hier zu bevorzugende.

            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. Aber dedlfix' Lösung ist die hier zu bevorzugende.

              Stimmt warscheinlich schon. Aber der OP sollte meines Erachtens trotzdem wissen das man auch problemlos mit relativen Pfaden includen kann ;-)

              Gruss

              Casper

              1. Hi,

                Stimmt warscheinlich schon. Aber der OP sollte meines Erachtens trotzdem wissen das man auch problemlos mit relativen Pfaden includen kann ;-)

                Genau *deswegen* habe ich es gepostet. ;-)

                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 Cybaer,

              Bsp.: include(ROOT.'/includes/docroot.php');

              include('./docroot.php');

              für ein Script, das auf der Root läuft und dort /includes/docroot.php holen soll.

              Mmh, gut zu wissen... Das wusste ich bisher noch nicht. *freu*
              So werd ich`s dann wahrscheinlich lösen.

              Aber dedlfix' Lösung ist die hier zu bevorzugende.

              Diese funktioniert bei meinem Provider leider auch nicht.

              Danke für eure Antworten
              Erri

              1. Hi,

                Aber dedlfix' Lösung ist die hier zu bevorzugende.
                Diese funktioniert bei meinem Provider leider auch nicht.

                In Abwandlung: $documentRoot=($_SERVER["DOCUMENT_ROOT]!="hier der falsche Pfad")?$_SERVER["DOCUMENT_ROOT]:("hier der richtige Pfad bzw. regexp-Gehampel");

                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. Hi Cybaer,

                  In Abwandlung: $documentRoot=($_SERVER["DOCUMENT_ROOT]!="hier der falsche Pfad")?$_SERVER["DOCUMENT_ROOT]:("hier der richtige Pfad bzw. regexp-Gehampel");

                  Achso, ich meinte eigentlich die Lösung mit der .htaccess-Datei funktioniert bei mir nicht...
                  Ich mach das jetzt folgendermaßen:

                  In jeder Seite:
                  include('./includes/docroot.php');

                  in die docroot.php schreibe ich dann:
                  if($_SERVER["DOCUMENT_ROOT]=="/falscher/pfad"){
                      //Pfad auf dem Webserver meines Providers
                      DEFINE('ROOT', '/richtiger_pfad/zum/virtual/host');
                  } else {
                      //Pfad auf meinem lokalem Webserver
                      DEFINE('ROOT', '/richtiger_pfad/zum/virtual/host');
                  }

                  In den Seiten kann ich dann auf die Konstante ROOT zugreifen...
                  Vielen Dank nochmals für eure Hilfe.

                  Erri

  3. echo $_SERVER['document_root']; ...

    Bist du sicher, dass du das in Kleinbuchstaben geschrieben hast?

    Nun ist es leider so, dass ich den DocumentRoot bei meinem Provider NICHT über das Array $_SERVER holen kann, sondern (lt. meines Providers) so vorgehen muss:
    echo preg_replace("/^((/.[^/]*){7}).*/", "$1/", $SCRIPT_FILENAME, 1);

    $SCRIPT_FILENAME sollte sicher auch $_SERVER['SCRIPT_FILENAME']. Es sei denn, das PHP-CGI deines Providers ist älter und kennt $_SERVER noch nicht (dann $HTTP_SERVER_VARS).

    Ich gehe doch richtig in der Annahme, dass PHP als CGI läuft?

    Folglich müsste ich dies vor jedem Upload von meinem lokalem Webserver auf den meines Providers (zumindest 1x) in jeder Datei ändern...
    Um mir diese Arbeit zu ersparen, suche ich eine Möglichkeit, den DocumentRoot (auf meinem lokalem Webserver) serverseitig in eine Variable (im Beispiel $SCRIPT_FILENAME) zu schreiben.

    Die einzigen Variablen, die man von Clients unbeeinflussbar auf dem Server setzen kann sind Environmentvariablen $_ENV (bzw. $HTTP_ENV_VARS)

    Weiß jemand von euch, ob und wenn ja wie dies funktioniert?

    So eine ENV-Variable müsstest du setzen, bevor das PHP-CGI aufgerufen wird. Dazu brauchst du die Erlaubnis, das in der .htaccess mittels

    SetEnv SPECIAL_PATH /foo/bin

    einzutragen.

    Oder gibt es sogar eine bessere Lösungs-Variante für mein Problem?

    So vielleicht?

    $documentRoot = isset($_SERVER['DOCUMENT_ROOT']) ? $_SERVER['DOCUMENT_ROOT'] : xx;

    statt xx bitte das was dein Provider gesagt hat eintragen.

    1. Hi,

      echo $_SERVER['document_root']; ...

      Bist du sicher, dass du das in Kleinbuchstaben geschrieben hast?

      Nein. *rotwerd* :-)
      Habe ich nur hier so geschrieben.

      $SCRIPT_FILENAME sollte sicher auch $_SERVER['SCRIPT_FILENAME']. Es sei denn, das PHP-CGI deines Providers ist älter und kennt $_SERVER noch nicht (dann $HTTP_SERVER_VARS).

      Ich gehe doch richtig in der Annahme, dass PHP als CGI läuft?

      Ich denke schon, da das Array $_SERVER zur verfügung steht, allerdings bei $_SERVER['DOCUMENT_ROOT'] der falsche Pfad ausgegeben wird...

      Danke für die Antwort
      Erri

    2. Hi nocheinmal,

      So eine ENV-Variable müsstest du setzen, bevor das PHP-CGI aufgerufen wird. Dazu brauchst du die Erlaubnis, das in der .htaccess mittels

      SetEnv SPECIAL_PATH /foo/bin

      einzutragen.

      Habe ich gerade probiert, wobei es auch geblieben ist.
      Schön wärs... Ich darf bei meinem Provider leider auch keine .htaccess anlegen, geschweige denn die vorhandene bearbeiten.

      Oder gibt es sogar eine bessere Lösungs-Variante für mein Problem?

      So vielleicht?

      $documentRoot = isset($_SERVER['DOCUMENT_ROOT']) ? $_SERVER['DOCUMENT_ROOT'] : xx;

      statt xx bitte das was dein Provider gesagt hat eintragen.

      $_SERVER['DOCUMENT_ROOT'] zeigt auf ein falsches Verzeichnis...

      Gruß
      Erri

      1. $_SERVER['DOCUMENT_ROOT'] zeigt auf ein falsches Verzeichnis...

        Achso, du meinst dieses Array-Element ist sowohl bei deinem Hoster als auch bei dir vorhanden?

        Dann müsstest du dir ein anderes Merkmal zur Unterscheidung ob das Script bei dir oder beim Hoster läuft aussuchen.
        Vielleicht den Inhalt von HTTP_HOST überprüfen
        oder GATEWAY_INTERFACE auswerten
        irgendwas halt, was sich nicht ändert und unterschiedlich ist.

        1. $_SERVER['DOCUMENT_ROOT'] zeigt auf ein falsches Verzeichnis...

          Achso, du meinst dieses Array-Element ist sowohl bei deinem Hoster als auch bei dir vorhanden?

          Genau, bei meinem Hoster zeigt es auf ein falsches Verzeichnis (ist aber vorhanden) und auf meinem lokalem Webserver zeigt es auf den richtigen Pfad...

          Dann müsstest du dir ein anderes Merkmal zur Unterscheidung ob das Script bei dir oder beim Hoster läuft aussuchen.

          Hier habe ich geschrieben, wie ich es jetzt lösen möchte...
          https://forum.selfhtml.org/?t=102958&m=633780

          Danke für eure Hilfe
          Erri

  4. 你好 Erri,

    Um mir diese Arbeit zu ersparen, suche ich eine Möglichkeit, den
    DocumentRoot (auf meinem lokalem Webserver) serverseitig in eine
    Variable (im Beispiel $SCRIPT_FILENAME) zu schreiben.

    Ich habe das immer so geloest, dass ich eine Environment-Variable setze.
    Das Classic Forum erwartet z. B.

    SetEnv CF_CONF_DIR /etc/cforum/

    in einer .htaccess.

    再见,
    克里斯蒂安

    --
    1 + 1 = 3 für gosse Werte von 1.