PHP-include vom Rootlevel aus

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • PHP-include vom Rootlevel aus

    Hallo zusammen,

    ich hab ein komisches Phänomen mit meiner Serverkonfiguration.
    Zur Situation: ich verwende portbasierte virtuelle Hosts und wenn ich in meinem PHP-Skript z.B.
    PHP-Code:
    include('/includes/config.php); 
    aufrufe, interpretiert PHP den ersten Slash als Rootlevel des Servers (also nicht das Rootlevel des VHosts!).

    In der Konfiguration des VHosts ist das DocumentRoot aber richtig gesetzt.

    An welcher Einstellung kann das noch liegen?
    Bin für jeden Tip dankbar...

  • #2
    Das hat mit VHosts nichts zu tun, das ist immer so.

    Kommentar


    • #3
      Re: PHP-include vom Rootlevel aus

      Original geschrieben von derTomsen
      Hallo zusammen,

      ich hab ein komisches Phänomen mit meiner Serverkonfiguration.
      Zur Situation: ich verwende portbasierte virtuelle Hosts und wenn ich in meinem PHP-Skript z.B.
      PHP-Code:
      include('/includes/config.php'); 
      aufrufe, interpretiert PHP den ersten Slash als Rootlevel des Servers (also nicht das Rootlevel des VHosts!).

      In der Konfiguration des VHosts ist das DocumentRoot aber richtig gesetzt.

      An welcher Einstellung kann das noch liegen?
      Bin für jeden Tip dankbar...
      PHP-Code:
      include("./includes/config.php"); #aktuelles verzeichnis 
      PHP-Code:
      include($_SERVER['DOCUMENT_ROOT']."/includes/config.php"); #ab document root 
      Zuletzt geändert von UzumakiNaruto; 21.05.2008, 09:18.
      Gruß
      Uzu

      private Homepage

      Kommentar


      • #4
        Danke für die Antworten.

        @UzumakiNaruto: diese Methoden sind mir bekannt und sie funktionieren auch wunderbar.

        Die Sache ist, dass ich keine relativen Pfade in der Applikation will, damit sich z.B. das Includen übersichtlicher und logischer gestaltet.
        Ich finde es ziemlich un************y, wenn man aufgrund der Ordnerstruktur solche
        PHP-Code:
        include('../../includes/db/driver.php'); 
        'Monster' findet.

        Da ist doch
        PHP-Code:
        include('/includes/db/driver.php'); 
        viel komfortabler, oder? Vor allem, weil es dann egal ist, in welchem Ordner man sich befindet.

        @onemorenerd: es muss schon mit der VHost-Konfiguration zusammenhängen, weil wenn z.B. über Plesk neue Subdomains angelegt werden, hat PHP auch keine Include-Rechte vom Rootlevel aus. Das wär ja sicherheitstechnisch ein SuperGAU!

        Also an irgendeiner Einstellung á la DocumentRoot, open_basedir oder include_path wird noch geschraubt werden müssen...
        Zuletzt geändert von derTomsen; 21.05.2008, 08:51.

        Kommentar


        • #5
          Die Sache ist, dass ich keine relativen Pfade in der Applikation will, damit sich z.B. das Includen übersichtlicher und logischer gestaltet.
          Ich finde es ziemlich un************y, wenn man aufgrund der Ordnerstruktur solche
          Und warum verwendest du dann nicht die Version mit DOCUMENT_ROOT (das ist garantiert kein relativer Pfad)?
          Und sonst denke ich du musst mit dem include_path arbeiten (http://lists.apple.com/archives/web-.../msg00052.html)
          Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

          [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
          Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

          Kommentar


          • #6
            dann nimm doch ein script um DEIN root zu finden

            PHP-Code:
            $folder_level "";
            while (!
            file_exists($folder_level."config.php"))
            {
               
            $folder_level .= "../";
            }
            require_once (
            $folder_level."config.php");
            define("BASEDIR"$folder_level); 
            das schreibst du in eine datei die du eh immer brauchst .... z.b. functions.php .. und schon hast du deinen "relativen" pfad
            Gruß
            Uzu

            private Homepage

            Kommentar


            • #7
              Danke für die schnellen Antworten.

              Den include_path hab ich schon wie beschrieben angepasst. Leider funktioniert das auch nicht so wie gewollt (also ein include('/includes...') führt wieder ins Rootlevel des Servers).

              So richtig zufrieden bin ich zwar noch nicht, aber es wird wohl die DocumentRoot-Methode werden, weil die noch am performantesten ist.

              Aber danke an alle!

              /tom

              Kommentar


              • #8
                Den include_path hab ich schon wie beschrieben angepasst. Leider funktioniert das auch nicht so wie gewollt (also ein include('/includes...') führt wieder ins Rootlevel des Servers).
                Aber ein include('datei.php') sollte aber für jeden VHost funzen, ohne Angabe des Include-Verzeichnisses
                Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

                [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
                Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

                Kommentar


                • #9
                  Original geschrieben von jahlives
                  Aber ein include('datei.php') sollte aber für jeden VHost funzen, ohne Angabe des Include-Verzeichnisses
                  Das stimmt und funktioniert auf jeden Fall.
                  Wenn ich halt in einem Unterordner die datei.php einbinden will muss ich ein '../' davor setzen. Und das wollte ich vermeiden.

                  Kommentar


                  • #10
                    Wenn ich halt in einem Unterordner die datei.php einbinden will muss ich ein '../' davor setzen. Und das wollte ich vermeiden.
                    Solange sich datei.php im Include Path des jeweiligen VHosts befindet brauchst du eigentlich keine ../ im Pfad. Da reicht der Name doch aus. Oder verstehe ich dein Problem nicht ganz ?

                    Gruss

                    tobi
                    Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

                    [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
                    Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

                    Kommentar


                    • #11
                      es muss schon mit der VHost-Konfiguration zusammenhängen, weil wenn z.B. über Plesk neue Subdomains angelegt werden, hat PHP auch keine Include-Rechte vom Rootlevel aus. Das wär ja sicherheitstechnisch ein SuperGAU!
                      Wenn du foo.php in deinem DocRoot includieren kannst, dann auch /Pfad/zum/DocRoot/foo.php. Die Zugriffsrechte auf eine Datei sind nicht von der Art der Referenzierung (relativ/absolut) abhängig.

                      Kommentar


                      • #12
                        doc_root
                        - foo.php
                        -- dir1
                        --- bar.php
                        -- dir2
                        -- dir3

                        bar.php
                        PHP-Code:
                        include ("../foo.php"); 
                        ../ wollte er vermeiden durch /foo.php aber dann ist er im wurzelverzeichnis seines linux systems und nicht mehr im doc_root
                        Gruß
                        Uzu

                        private Homepage

                        Kommentar


                        • #13
                          Original geschrieben von UzumakiNaruto
                          ../ wollte er vermeiden durch /foo.php aber dann ist er im wurzelverzeichnis seines linux systems und nicht mehr im doc_root
                          Genauso ist es!

                          Kommentar


                          • #14
                            Und so war es schon immer.

                            Wollen wir uns jetzt weiter im Kreis drehen oder siehst du ein, dass absolute Pfade immer absolut zum Wurzelverzeichnis des Dateisystems sind und deine Apachekonfiguration daran nichts ändern kann?!

                            Kommentar


                            • #15
                              Für mich ist das Thema sowieso schon erledigt...

                              Also, danke und schönen Tag noch!

                              Kommentar

                              Lädt...
                              X