Ankündigung

Einklappen
Keine Ankündigung bisher.

realpath /dirname

Einklappen

Neue Werbung 2019

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

  • realpath /dirname

    hallo leute,

    kann mir bitte jemand bitte erklären was das hier soll:
    echo realpath(dirname(__FILE__). '/../')
    dirname(__FILE__) zeigt mir das übergeordnete verzeichnis an, also das verzeichnis in dem die index.php liegt
    realpath(dirname(__FILE__)) entfernt die "."
    die manche Serverkonfigurationen includen.
    aber was hat das anbinden von '/../' zu bedeuten ?

  • #2
    .. = Ins elternverzeichnis des aktuellen pfad wechseln

    Realpath macht keine Punkte weg es löst virtuelle Pfade ( ../../../ ) in absolute Pfade auf.
    [URL="https://gitter.im/php-de/chat?utm_source=share-link&utm_medium=link&utm_campaign=share-link"]PHP.de Gitter.im Chat[/URL] - [URL="https://raindrop.io/user/32178"]Meine öffentlichen Bookmarks[/URL] ← Ich habe dir geholfen ? [B][URL="https://www.amazon.de/gp/wishlist/348FHGUZWTNL0"]Beschenk mich[/URL][/B].

    Kommentar


    • #3
      Damit kommst Du eine Ebene höher, quasi das Verzeichnis, das das Verzeichnis beinhaltet, das Deine index.php beinhaltet...

      EDIT: ...wie tr0y schon geschrieben hat.
      Competence-Center -> Enjoy the Informatrix
      PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

      Kommentar


      • #4
        allerdings zeigt dir dirname(__FILE__) nicht das "übergeordnete" Verzeichnis an, sondern das "aktuelle"
        "Irren ist männlich", sprach der Igel und stieg von der Drahtbürste [IMG]http://www.php.de/core/images/smilies/icon_lol.gif[/IMG]

        Kommentar


        • #5
          Zitat von marcopolo Beitrag anzeigen
          echo realpath(dirname(__FILE__). '/../')
          Macht das Zusammenkleistern irgend einen Sinn?

          PHP-Code:
          echo realpath('..'); 
          Sollte es auch tun.

          Kommentar


          • #6
            Vorsicht:
            PHP-Code:
            realpath(__DIR__.'/..'); 
            ist script bezogen
            PHP-Code:
            realpath('.'); 
            ist current directory bezogen
            PHP-Code:
            chdir('..');
            var_dump(realpath('.') == realpath(__DIR__.'/..')); 
            Code:
            bool(true)
            [URL="https://gitter.im/php-de/chat?utm_source=share-link&utm_medium=link&utm_campaign=share-link"]PHP.de Gitter.im Chat[/URL] - [URL="https://raindrop.io/user/32178"]Meine öffentlichen Bookmarks[/URL] ← Ich habe dir geholfen ? [B][URL="https://www.amazon.de/gp/wishlist/348FHGUZWTNL0"]Beschenk mich[/URL][/B].

            Kommentar


            • #7
              Alles klar, Danke.

              Kommentar


              • #8
                ok, und was bedeutet script bezogen ?
                was machts denn für einen unterschied zum current directory bezogen ?

                Kommentar


                • #9
                  Bei bibliotheken mit oder ohne autoloading mechanismuss z.b. sollte die biblothek intern dateien grundsätzlich relativ vom autoloader-script dateien includieren, würde er es vom current dir aus, könnte dieser sich bereits beim includieren der bibliothek verschoben haben ( siehe obiges beispiel ).

                  Bei Standard-Scripts würde ich mich trotzdem so verhalten und mich nicht auf das Current-Directory verlassen, denn das ( wenn es sich ändert ) ändert sich für das gesamte Script, ganz egal in welchem Scope, wenn es sich verändert.
                  [URL="https://gitter.im/php-de/chat?utm_source=share-link&utm_medium=link&utm_campaign=share-link"]PHP.de Gitter.im Chat[/URL] - [URL="https://raindrop.io/user/32178"]Meine öffentlichen Bookmarks[/URL] ← Ich habe dir geholfen ? [B][URL="https://www.amazon.de/gp/wishlist/348FHGUZWTNL0"]Beschenk mich[/URL][/B].

                  Kommentar


                  • #10
                    PHP/das Betriebssystem benötigt letztlich immer einen absoluten Pfad, um auf eine Datei zugreifen zu können. Deshalb wird bei relativen Pfadangaben (include 'a.php') das aktuelle Arbeitsverzeichnis ergänzt und so ein absoluter Pfad geschaffen. Das Arbeitsverzeichnis ist üblicherweise das Verzeichnis, in dem die erste aufgerufene PHP-Datei liegt. Das Verzeichnis ändert sich auch dann nicht, wenn diese Datei weitere Dateien aus Unterverzeichnissen inkludiert.

                    __DIR__ liefert nichts weiter als den absoluten Pfad zum Verzeichnis der aktuellen Datei. Dieses Verzeichnis weicht logischerweise bei Includes aus Unterverzeichnissen vom Arbeitsverzeichnis ab. Da ein aus __DIR__.$x zusammengefügter Pfad bereits absolut ist, braucht dann dort nicht mehr das Arbeitsverzeichnis ergänzt zu werden.

                    Warum sind absolute Pfadangaben (das meint hier vor allem solche mit __DIR__) direkt im Code in vielen Fällen sinnvoller?

                    Post-Recycling:
                    Szenario 1: Ich nutze in einer Klasse eine externe Datei (etwa eine XSL-Datei), die im selben Verzeichnis wie die Klasse liegt. Gebe ich den Pfad zu dieser Datei relativ an, wird er entsprechend zum Pfad der aufgerufenen Script-Datei gebildet, die die Klasse letztlich einbindet, nicht zum Pfad der Klassendatei. Das wird zum Problem, sobald sich die Anordnung der Verzeichnisse verschiebt: Eine Verzeichnisebene mehr oder weniger und die Pfade stimmen nicht mehr. Oder Verzeichnisnamen ändern sich, und Pfade stimmen nicht mehr.

                    Szenario 2: Relative Pfade sind in der Regel relativ zum Arbeitsverzeichnis. Das ist bei Aufruf über den Webserver vermutlich unproblematisch, sorgt aber bei Aufruf über die Kommandozeile für Schwierigkeiten, falls der Aufruf nicht aus dem Verzeichnis der Scriptdatei heraus getätigt wird. (Zum Beispiel bei: $ php ./foo/bar/baz.php. Das Arbeitsverzeichnis ist in diesem Fall nicht ./foo/bar, sondern das Verzeichnis, in dem sich die Unterverzeichnisse foo/bar befinden. Anweisungen wie include 'a.php' würden ins falsche Verzeichnis zeigen.)

                    Eine „Verankerung“ mit __DIR__ löst beide angesprochenen Probleme.

                    Kommentar


                    • #11
                      ok, '..' springt ein verzeichnis zurück, was hat '.' für eine bedeutung ?

                      Kommentar


                      • #12
                        Pfade in der Webentwicklung
                        http://www.php.de/wiki-php/index.php...Webentwicklung
                        The string "()()" is not palindrom but the String "())(" is.

                        Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
                        PHP.de Wissenssammlung | Kein Support per PN

                        Kommentar


                        • #13
                          Zitat von hausl Beitrag anzeigen
                          ich finde keine beschreibung dafür was '.' macht,
                          dass relative pfade damit beginnen habe ich dem wiki-eintrag entnehmen können, ich weiss jetzt dass '..' zum übergeordneten verzeichnis springt,
                          was genau macht '.' ?

                          Kommentar


                          • #14
                            Ein Pfad „macht“ überhaupt nicht und ein .. „springt“ auch nicht irgendwo hin. Beides bezeichnet einen bestimmten Pfad, nicht mehr, nicht weniger.
                            [COLOR="#F5F5FF"]--[/COLOR]
                            [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
                            „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                            [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
                            [COLOR="#F5F5FF"]
                            --[/COLOR]

                            Kommentar


                            • #15
                              . ist das aktuelle Verzeichnis, .. das darüber. Also wären die beiden folgenden gleichwertig - so mein Stand der Dinge.

                              PHP-Code:
                              include "db.php";
                              include 
                              "./db.php"
                              The string "()()" is not palindrom but the String "())(" is.

                              Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
                              PHP.de Wissenssammlung | Kein Support per PN

                              Kommentar

                              Lädt...
                              X