Root-Verzeichnis global festlegen

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

  • Root-Verzeichnis global festlegen

    Hallo Forum,

    gibt es eine gute Möglichkeit, ohne absoluten Pfad (also ohne Domain) für sämtliche PHP-Aktionen dasselbe Root-Verzeichnis anzugeben, das auch ein Browser nimmt, wenn z.B. href="[COLOR=red]/[/COLOR]kontakt.html" geklickt wird? Man sollte dies nur einmal angeben müssen.

    Danke & Grüße,
    Erik
    Zuletzt geändert von erikbln; 06.02.2008, 17:23.

  • #2
    $_SERVER['DOCUMENT_ROOT'] wäre ev etwas für dich. Wobei das dann aber ein absoluter Pfad wäre
    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


    • #3
      Danke für die schnelle Antwort. Das hatte ich schon ein paar Threads weiter unten gesehen, aber wie würde ich das konkret umsetzen? Ich würde halt gerne einmal zu Beginn meiner config.php festlegen, von welchem Verzeichnis z.B. bei include('/inc/kontakt.php'); ausgegangen werden soll (d.h. dies soll gleichbedeutend sein mit domain.de/inc/kontakt.php), und es sollte auch lokal mit xampp funktionieren.

      Kommentar


      • #4
        von welchem Verzeichnis z.B. bei include('/inc/kontakt.php');
        Bei einem Linux/Unix wird in diesem Fall versucht von / auszugehen. Das wird dir bei einem Hoster aber Fehlermeldungen um die Ohren hauen weil du keine Berechtigung hast ausserhalb deines Webauftritts auf Dateien zuzugreifen und ggf existiert dieser Pfad ja nicht.
        Für includes sollte man immer absolute Pfade wählen und da bietet sich
        PHP-Code:
        include($_SERVER['DOCUMENT_ROOT'].'/inc/kontakt.php'); 
        an v.a. weil es dann auch auf einem Windows funzen wird.
        Allenfalls könntest du via php.ini den include Pfad ergänzen...
        Ich für meinen Teil bevorzuge jedoch die Lösung mit Server + Doc Root

        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


        • #5
          Super, das funktioniert schonmal, vielen Dank. Allerdings muss ich das bei jedem include erneut angeben, oder gibt es auch die Möglichkeit, es nur einmal global zu tun, um Redundanz zu vermeiden?

          Der nächste Schritt ist die Einbindung von Grafiken, für die ich mir eine kleine Funktion geschrieben habe. Ist eigentlich selbsterklärend, und funktioniert auch, aber ist das Eurer Meinung nach gut gelöst? Auch hier ist der Slash, mit dem der Pfad beginnt, der "Knackpunkt". $img_pfad bekommt halt z.B. den Wert '[COLOR=red]/[/COLOR]fotos/01.jpg'.

          PHP-Code:
          function single_img($img_pfad$alt_text) {
          $size getimagesize($_SERVER['DOCUMENT_ROOT'].$img_pfad);
          echo 
          '<img src="'.$img_pfad.'" alt="'.$alt_text.'" '.$size[3].' />';

          Kommentar


          • #6
            Auch hier ist der Slash, mit dem der Pfad beginnt, der "Knackpunkt". $img_pfad bekommt halt z.B. den Wert '/fotos/01.jpg'.
            Wieso Knackpunkt? Pfade für die Clients finde ich persönlich am besten mit / also pseudoabsolut
            So funzt es auf der lokalen Testkiste wie im Web und der Pfad sagt auch mehr als ../../../bla/file.txt
            Und wegen der Redundanz beim serverseitigen include mit $_SERVER['DOCUMENT_ROOT'] würde ich mir keine Sorgen machen.
            Mit der "richtigen" IDE tippst du eh nur '$_S' ENTER 'DO' ENTER (ich glaube sogar 'D' reicht, weil es imho keine weitere Servervar gibt die mit D beginnt).
            Ein Hoch auf die Codevervollständigung

            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


            • #7
              Wieso Knackpunkt?
              Das schrieb ich nur deswegen, weil es durch den Slash erstmal nicht mehr gleich behandelt wird (denn der Browser deutet das ja anders als es PHP auf dem Server tut), aber dank DOCUMENT_ROOT gibt es dann ja doch wieder dasselbe Ergebnis.
              Pfade für die Clients finde ich persönlich am besten mit / also pseudoabsolut
              Ja, unbedingt, ich mache das nur so.
              Mit der "richtigen" IDE tippst du eh nur '$_S' ENTER 'DO' ENTER (ich glaube sogar 'D' reicht, weil es imho keine weitere Servervar gibt die mit D beginnt).
              Stimmt, aber ich kann ja auch zu Beginn der config.php einfach eine Variable erstellen und dann mit dieser weiterarbeiten:
              PHP-Code:
              $root $_SERVER['DOCUMENT_ROOT']; 

              Kommentar


              • #8
                noch einfacher geht's mit ...

                PHP-Code:
                // konstante definieren
                define('LOC_REAL'dirname(__FILE__));
                // path settings for includes    
                ini_set('include_path'LOC_REAL); 
                ^^ muss in deine config eingebunden werden, welche sich im project-root befindet.

                einbinden kannst du dann weitere dateien so ....
                PHP-Code:
                include_once './path/to/file.php'
                die pathangabe bezieht sich dabei relativ auf den include_path.

                um ansonsten auf den path zugreifen zu können, arbeite mit der konstante ...

                z.b.
                PHP-Code:
                $size getimagesize(LOC_REAL.$img_pfad); 



                EDIT:
                noch was angepasst. ;-)
                Zuletzt geändert von Abraxax; 06.02.2008, 22:08.
                INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                Kommentar


                • #9
                  Stimmt, aber ich kann ja auch zu Beginn der config.php einfach eine Variable erstellen und dann mit dieser weiterarbeiten:
                  Klar kannst du das, nur hast du genau gleich viel Redundanz
                  Vermutlich würde der Code dann sogar ein oder zwei tausendstel Sekunden langsamer, weil erst eine Var erstellt und ein Wert zugewiesen werden muss.
                  @Haxe
                  Das ist echt ne geile Lösung
                  Zuletzt geändert von jahlives; 06.02.2008, 22:07.
                  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


                  • #10
                    hab noch was bearbeitet. ;-)
                    INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                    Kommentar


                    • #11
                      Du läufst am späten Abend ja zur Hochform auf
                      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


                      • #12
                        *gg*

                        ich verwende das so oder so ähnlich in einem projekt .-)

                        aber das ist alles nur für den serverseitigen teil.

                        wenn du nun LOC_HTTP z.b. haben willst, musst du das ganze von hand angeben.

                        einen optimalen weg / den heiligen gral zur automatischen ermittlung habe ich noch nicht gefunden.
                        INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                        Kommentar


                        • #13
                          einen optimalen weg / den heiligen gral zur automatischen ermittlung habe ich noch nicht gefunden.
                          OffTopic:

                          Wenn du ihn gefunden hast würde ich ihn patentieren lassen und in sauteuren Volumenlizenzen verhöckern


                          Gruss und gut's Nächtle
                          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


                          • #14
                            hier mal ein ansatz ...

                            PHP-Code:
                            // basic settings http
                            define('LOC_HTTP_TMP''/'.str_replace($_SERVER['DOCUMENT_ROOT'], ''LOC_REAL));
                            define('LOC_HTTP', ( LOC_HTTP_TMP == '/' '' LOC_HTTP_TMP )); 
                            evtl gibt's eine besser lösung.
                            INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                            Kommentar


                            • #15
                              Interessant wird das ganze bei der Url - ich finde es ist wesentliche weniger Fehleranfällig überall mit einer absoluten Url zu arbeiten:
                              PHP-Code:
                              'http://' $_SERVER['SERVER_NAME'] .
                                 
                              mb_substr(urldecode($_SERVER['REQUEST_URI']),0,-(mb_strlen($_SERVER['PATH_INFO']))) . '/'
                              Zufrieden bin ich damit aber auch noch nicht ganz ...
                              Die Regeln | rtfm | register_globals | strings | SQL-Injections | [COLOR=silver][[/COLOR][COLOR=royalblue]–[/COLOR][COLOR=silver]][/COLOR]

                              Kommentar

                              Lädt...
                              X