$_SERVER['DOCUMENT_ROOT']

Von: , Frage gestellt am Mi, 23. Apr 2008

Hallo,
ich habe eine Seite in einem Unterverzeichniss meines Basisverzeichnisses bei meinem Hoster abgelegt.
Das Basis-Verzeichniss meines Accounts beim Hoster ist: "/var/www/html/account/"
Mein Domainname verweist auf "/var/www/html/account/html/" (Startpfad aller html-Dokumente).
Die Index-Datei meiner Seite steht im Pfad: "/var/www/html/account/html/seite/".
Ferner habe ich eine Subdomain: angelegt die auf "/seite" verweist.
Ich möchte jetzt auf ein File secrets.php in meinem Basis-Verzeichniss zugreifen (also: "/var/www/html/account/secrets.php") weil dort die Kennwörter für die SQL-Datenbank zugeordnet werden.

Das Problem ist das die Variable $_SERVER['DOCUMENT_ROOT'] je nachdem wie ich auf meine Seite zugreife (domain.de/seite oder seite.domain.de) etwas anderes liefert.
Hat jemand eine Idee wie ich das File secrets.php adressieren kann damit das in beiden Fällen funktioniert. Das Ganze soll natürlich auch bei meiner lokalen Apache-Umgebung also mit einem anderem Basis-Verzeichniss funktionieren und auch nach einem Umzug zu einem anderen Hoster. Ich brauche also so etwas wie eine Variable die unabhängig davon ob ich über meine Subdomain oder über domain.de/seite zugreife das gleiche liefert.

12 Antworten zu dieser Frage

  1. Antwort von nach einer Stunde 0 hilfreich
    Re: $_SERVER['DOCUMENT_ROOT']

    Hallo,

    warum greifst du nicht relativ mit ../../secrets.php zu ?
    Ansonsten liefert dirname(__FILE__) den absoluten Pfad zur aktuellen Datei, mir realpath(dirname(__FILE__)."../../") solltest du dann auch den Basispfad absolut bekommen.

    Alexander

    • Antwort von nach einer Stunde 0 hilfreich
      Re^2: $_SERVER['DOCUMENT_ROOT']

      Das ist richtig! Aber wenn ich eine tief verschachtelte Verzeichnissstruktur habe muss ich an jeder Stelle im Pfad etwas anderes eintragen.

      • Antwort von nach 2 Stunden 0 hilfreich
        Re^3: $_SERVER['DOCUMENT_ROOT']

        Das ist richtig! Aber wenn ich eine tief verschachtelte
        Verzeichnissstruktur habe muss ich an jeder Stelle im Pfad
        etwas anderes eintragen.
        DOCUMENT_ROOT ist nunmal pro virtuellem Host im Apache ggfs. verschieden, da bekommst du eben die Definition für _diesen_ virtuellen Host. Wenn du das DOCUMENT_ROOT für deine Domains grundsätzlich auf eine oder 2 Verzeichnisebenen beschränkt ist, könntest du auch von dort ausgehend mit if (is_file($_SERVER["DOCUMENT_ROOT"]."../..")) include(...) die Datei laden, verteilen sich die ROOTs über mehrere Ebenen, hilft das natürlich auch nicht.

        Oder du erweiterst den include_path per .htaccess um dein Include-Verzeichnis, so das du die Datei immer ohne Pfad findest, also php_value include_path .:/path/to/pear:/dein/projekt/include
        soweit beim Hoster erlaubt.

        Viel mehr Möglichkeiten fallen mir da jetzt nicht ein...

        • Antwort von nach 2 Stunden 0 hilfreich
          Re^4: $_SERVER['DOCUMENT_ROOT']

          Auf den include_path habe ich leider keinen Zugriff.
          Notfalls muss ich halt mit ../ arbeiten. Ich dachte es gibt vielleicht einen Trick-17 um mit den $_SERVER[] Variablen was zu basteln. Ich hätte gerne eine allgemeingültige Lösung falls ich mal wieder den Hoster wechseln muss (der Umzug einer Site ist eine Sauarbeit wenn man das vorher nicht mit eingeplant hat)

          • Antwort von nach 11 Stunden 0 hilfreich
            Re^5: $_SERVER['DOCUMENT_ROOT']

            Und wenn du define('PFAD_ZUR_SECRETS_PHP', realpath(dirname(__FILE__)."../../secrets.php")) in deinen Skripten definierst. Müsstest du ja nur einmal definieren und in deinem aktuellen Skript ohne weiteres nutzen, auch wenn das über mehrere Skripte verfügt. (müsste denn halt nur ausgelagert werden und nach Bedarf hinzugeladen werden) [Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

            • Antwort von nach 15 Stunden 0 hilfreich
              Re^6: $_SERVER['DOCUMENT_ROOT']

              Und wenn du define('PFAD_ZUR_SECRETS_PHP',
              realpath(dirname(__FILE__)."../../secrets.php")) in deinen
              Skripten definierst. Müsstest du ja nur einmal definieren und
              in deinem aktuellen Skript ohne weiteres nutzen, auch wenn das
              über mehrere Skripte verfügt. (müsste denn halt nur
              ausgelagert werden und nach Bedarf hinzugeladen werden)
              Ich brauche den Pfad zur secret.php in verschiedenen Seiten die sich in verschiedenen Ebenen unterhalb von DOCUMENT_ROOT befinden. Bei der Mehtode muss ich in jeder Ebene den Pfad anders definieren.

            • Antwort von nach 17 Stunden 0 hilfreich
              Re^7: $_SERVER['DOCUMENT_ROOT']

              Das meinte ich ja mit auslagern... Du packst in das ROOT Verzeichnis der Applikation, ne load_config.php und lädst die halt in jedem Skript hinzu... [Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

            • Antwort von nach 20 Stunden 0 hilfreich
              Re^8: $_SERVER['DOCUMENT_ROOT']

              Das meinte ich ja mit auslagern... Du packst in das ROOT
              Verzeichnis der Applikation, ne load_config.php und lädst die
              halt in jedem Skript hinzu...
              Irgendwie stehe ich im Augenblick etwas auf dem Schlauch.
              Das Problem ist doch gerade das DOCUMENT_ROOT sich ändert je nachdem ob ich über die Subdomain oder die Domain komme. Dann habe ich doch das gleiche Adressierungsproblem mit der load_config.php oder?
              Kannst du mal ein Beispiel machen.

          • Antwort von nach 22 Stunden 0 hilfreich
            Re^5: $_SERVER['DOCUMENT_ROOT']

            Noch eine hässliche Variante: ins jeweilige DOCUMENT_ROOT (oder immer eine höher) ein secrets.php legen, wobei die der Subdomain auch nur ein include() der "richtigen" sein kann.



Keine passende Antwort gefunden? Jetzt eigene Frage stellen!