2016-07-10 17 views
2

können sagen, i eine Verzeichnisstruktur wie diese habenphp, wie das Verzeichnis, bis eine bestimmte Datei bewegen

____ 
| Root 
    |_____ 
     Folder1 
    |_____ 
     Folder2 
     |_____ 
      Subfolder2.1 
      Subfolder2.2 
       |______ 
        Subfolder2.2.1 

, wenn ich nach oben von Subfolder2.1 zum Root Ordner verschieben wollte, würde ich ../../ zu tun haben, und wenn ich muss von Subfolder2.2.1 zu Root bewegen würde ich ../../../ zu tun haben, ist es eine Möglichkeit, in pHP oder in regulären Ausdruck einen Ausdruck zu schreiben, wieder auf das Verzeichnis geht, bis er einen bestimmten Dateinamen (root) findet

derzeit in symfony ich tue etwas wie $defaultTemplate = '::../../../../../app/Resources/views/'.$input->getOption('mytwigdest') eine Vorlage in einem directroy für eine Ebene des Ordners nicht dessen Unterordner oder übergeordnete Ordner,

natürlich funktioniert dies nur zu schaffen, was Ausdruck i zu setzen in brauchen statt der ../ so dass es geht um die Verzeichnisse, bis sie ein bestimmtes Verzeichnis Namen findet

__ DIR __ und symfonys $this->container->getParameter('kernel.root_dir') nicht funktionieren würde, wie es mir die aktuelle Dateipfad geben würde, die aus ganz anderen ist, wo ich bin zu schaffen eine Vorlage mit $defaultTemplate

+0

Zahlen sind in den Verzeichnissen 'Subfolder2.2.1' verwendet für nur Ihr Problem darstellt, oder existieren als Teil des Namens des realen Verzeichnis? – revo

+0

nur für die Erklärung zu SO –

+0

imo, Da die Unterordner normalerweise nützliche und identifizierte Dinge enthalten. d. h. Protokolldatei, Datendateien usw. Ich habe nur ein paar definierte Konstanten, um auf sie zuzugreifen. d.h. 'APP_LOG_DIR',' APP_DATA_ROOT', usw. Sie werden durch den 'Anwendungs-Bootstrap' eingerichtet. –

Antwort

0
include($_SERVER['DOCUMENT_ROOT'].'/index.php'); 

Wird immer den direkten zu Stammordner finden. Beachten Sie, dass Sie nach $ _SERVER / benötigen.

+0

dies führt zu einer Reihe von Verzeichnissen wie 'C> wanp64> www> Projektname' es tatsächlich denkt, dass diese Verzeichnisse erstellt werden müssen, XD das gleiche wie __ DIR __ oder die symfony Methode, die ich in der Frage –

1

Obwohl ich nicht sicher bin, warum Sie mit so einer Lösung Ihres Problems gehen müssen, berechnet dies die Anzahl der übergeordneten Verzeichnisse ../ in einem benutzerdefinierten Verzeichnis. Sie möchten nur den Namen ändern. Hier ist sie Root:

str_repeat("../", count(explode(DIRECTORY_SEPARATOR , __FILE__)) - (1 + array_flip(explode(DIRECTORY_SEPARATOR , __FILE__))['Root'])); 

Setzen Sie alles zusammen:

$defaultTemplate = '::'.str_repeat("../", count(explode(DIRECTORY_SEPARATOR , __FILE__)) - (1 + array_flip(explode(DIRECTORY_SEPARATOR , __FILE__))['Root'])).'app/Resources/views/'.$input->getOption('mytwigdest'); 
+0

ich erwähne wie die Verwendung von PHP-Built-in-Funktionen, aber immer noch die Datei "__FILE__" gibt die Adresse der aktuellen Datei an, die ich nicht aus einem anderen Ordner nach oben verschieben möchte, als den aktuellen Ordner. +1 –

+0

Kurze Wege sind willkommen, aber leider gibt es keine eingebaute Funktion für dieses spezielle Problem. @ ptsdtriggered – revo