PHP Uzyskaj nazwę bieżącego katalogu


123

Mam stronę php w folderze w mojej witrynie.

Muszę dodać nazwę bieżącego katalogu do zmiennej, na przykład:

$myVar = current_directory_name;

czy to możliwe?

Odpowiedzi:


247
getcwd();

lub

dirname(__FILE__);

lub (PHP5)

basename(__DIR__) 

http://php.net/manual/en/function.getcwd.php

http://php.net/manual/en/function.dirname.php

Możesz użyć, basename()aby uzyskać końcową część ścieżki :)

W twoim przypadku powiedziałbym, że najprawdopodobniej chcesz go użyć getcwd(), dirname(__FILE__)jest bardziej przydatny, gdy masz plik, który musi zawierać inną bibliotekę i jest zawarty w innej bibliotece.

Na przykład:

main.php
libs/common.php
libs/images/editor.php

W swoim common.phpmusisz używać funkcji w editor.php, więc używasz

common.php:

require_once dirname(__FILE__) . '/images/editor.php';

main.php:

require_once libs/common.php

W ten sposób, gdy common.php jest require'dw main.php, wezwanie require_oncew common.phppoprawnie obejmuje editor.phpw images/editor.phpzamiast próbować szukać w bieżącym katalogu, w którym main.phpjest prowadzony.


5
A basename(__DIR__)w PHP 5
Xeoncross

To daje mi całą ścieżkę. Czy istnieje sposób na pobranie tylko nazwy katalogu?
Satch3000

13
@ Satch3000basename(getcwd())
Andreas Wong

2
Zauważ, że jeśli używasz dołączenia lub wymaganego pliku, __DIR__jest to ścieżka dołączonego pliku, a NIE bieżący katalog
Sebastien Horin,

Korzystanie z opcji basename(__DIR__) oszczędził mi dzień. Wielkie dzięki za udostępnienie!
Devner

18

Aby uzyskać tylko nazwę katalogu, w którym skrypt został wykonany:

//Path to script: /data/html/cars/index.php
echo basename(dirname(__FILE__)); //"cars"

11
echo basename(__DIR__); will return the current directory name only
echo basename(__FILE__); will return the current file name only

2
Tak długo, jak masz PHP 5.3 lub nowszy
nazwy wyświetlanej

11

Na przykład

Your Path = /home/serverID_name/www/your_route_Dir/

THIS_is_the_DIR_I_Want

DUSZA, KTÓRA DZIAŁA:

$url = dirname(\__FILE__);
$array = explode('\\\',$url);
$count = count($array);
echo $array[$count-1];

3
Wydaje się, że PO zaakceptował już odpowiedź na swój problem. Chociaż masz wyraźną wartość dodaną, czy musisz tutaj wyładować swoje furstracje?
Dutts

stackoverflow.com/help/formatting wyjaśni, jak uczynić rzeczy odważnymi, unikając używania wielkich liter, które, jak słusznie, wskazałeś, oznaczają krzyki w Internecie.
Dutts,

7

Właściwie znalazłem najlepsze rozwiązanie:

$cur_dir = explode('\\', getcwd());
echo $cur_dir[count($cur_dir)-1];

jeśli twój katalog to www \ var \ path \ Current_Path

to zwraca Current_path


4
Uważaj, na serwerach Linux nie używamy odwrotnego ukośnika, tylko ukośnik. PHP ma magiczną stałą, która czyni go wieloplatformowym, zobaczPATH_SEPARATOR
renoirb

2

$myVar = str_replace('/', '', $_SERVER[REQUEST_URI]);

libs / images /index.php
Wynik: obrazy


Cóż, myślę, że wszyscy zgodzilibyśmy się, że Stack Overflow ma jednych z najbardziej pedantycznych użytkowników w sieci. O to właśnie chodzi. Próba znalezienia rozwiązań, które będą działać za 20 lat w dziwnym miejscu, jest trudna. Jeśli niektórzy z nas są schrzanieni, to po prostu pasuje do terytorium. :) ps Nie byłem zwolennikiem przegranej.
Adam Chalcraft

1

Jeśli masz PATH i nie chcesz martwić się, czy Twój skrypt działa w folderze, który Cię interesuje, to działa:

basename(parse_url($_GET['dir_link'])['path'],PHP_URL_PATH)
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.