Mam taką strukturę folderów w moim projekcie PHP. (to jest pokazane w zaćmieniach)
-MySystem
+Code
+Data_Access
-Public_HTML
+css
+js
+Templates
-resources
Kiedy próbuję tego kodu
echo $_SERVER['DOCUMENT_ROOT']
wyjście jest
D: / obszar roboczy
Jak mogę uzyskać ścieżkę do RootDirectory systemu ( MySystem
) bez zakodowania na stałe nazwy folderu?
__DIR__
. Jest względny w stosunku do samego pliku, więc jeśli w dołączeniu, w podkatalogu, nie zwróci tylko katalogu głównego.Kiedy to mówisz
zawiera tę ścieżkę:
W takim razie
D:
tego szukasz, prawda? W takim przypadku możesz zdetonować łańcuch ukośnikami i zwrócić pierwszy:Spowoduje to wyświetlenie katalogu głównego serwera.
Aktualizacja: Gdy używasz stałej
DIRECTORY_SEPARATOR
zamiast zakodowanego na stałe ukośnika ('/'
), ten kod działa również w systemie Windows.Aktualizacja 2:
$_SERVER
zmienna globalna nie zawsze jest dostępny. Na przykład w wierszu poleceń (cli). Więc powinieneś użyć__DIR__
zamiast$_SERVER['DOCUMENT_ROOT']
.__DIR__
zwraca ścieżkę do samego pliku php.źródło
__DIR__
zamiast$_SERVER['DOCUMENT_ROOT']
.użyj funkcji PHP:
getcwd()
Pobiera bieżący katalog roboczy.
źródło
Chcę wskazać, jak Wordpress radzi sobie z tym:
Ponieważ Wordpress jest bardzo intensywnie używany w całym Internecie, a także działa dobrze lokalnie, mam duże zaufanie do tej metody.
źródło
możesz spróbować:
$_SERVER['PATH_TRANSLATED']
zacytować:
źródło: php.net/manual
źródło
źródło
Podsumowanie
Ten przykład zakłada, że zawsze wiesz, gdzie folder główny Apache to „/ var / www /” i próbujesz znaleźć następną ścieżkę do folderu (np. „/ Var / www / my_website_folder”). Działa to również ze skryptu lub przeglądarki internetowej, dlatego istnieje dodatkowy kod.
Kod PHP7
Przykład
Wynik:
Detale:
Zasadniczo najpierw próbuje pobrać DOCUMENT_ROOT, jeśli zawiera '/ var / www /', a następnie go użyć, w przeciwnym razie pobierz bieżący katalog (który istnieje w projekcie) i pobiera następną wartość ścieżki w oparciu o liczbę ścieżek $ root. Uwaga: dodano instrukcje rtrim, aby upewnić się, że ścieżka wraca zakończona znakiem „/” we wszystkich przypadkach. Nie sprawdza, czy musi być większy niż / var / www /, może również zwrócić / var / www / jako możliwą odpowiedź.
źródło