2012-06-22 10 views
22

Zrobiłem sporo poszukiwań, więc przepraszam, jeśli to jest dupe.
W każdym razie potrzebuję uzyskać nazwę folderu, w którym znajduje się bieżący plik. Na przykład chcę przekonwertować coś w rodzaju example.com/folder/subfolder/file.php na subfolder.
Mój obecny kod to dirname($_SERVER['PHP_SELF']), ale to zwraca /folder/subfolder zamiast subfolder. Dziękuję Ci!Uzyskaj folder macierzysty bieżącego pliku PHP

Odpowiedz

47

Najprostszym sposobem jest:

basename(__DIR__); 

http://php.net/manual/en/language.constants.predefined.php

+2

Czy nie powinno to być oznaczone jako poprawna odpowiedź? '$ _SERVER ['PHP_SELF']' może zwrócić plik zawierający "bieżący plik". "Aktualny plik" to __DIR__ w prawo? A może czegoś brakuje? – taylorcressy

+0

@taylorcressy wydaje się, że powyższa odpowiedź została podana przed tym ... również nie używamy magii stałej –

+2

@MarcelDjaman Rozumiem, dlaczego ta druga została oznaczona jako poprawna. Po prostu wyjaśniam, że jest to RZECZYWISTA poprawna odpowiedź. Z technicznego punktu widzenia pierwsza odpowiedź nie jest poprawna we wszystkich przypadkach (tj. W dołączonym pliku) – taylorcressy

-5

Po prostu użyj .. względny akcesor, który oznacza folder nadrzędny.

+0

Wiem o tym, ale chcę uzyskać nazwę folderu, a nie dostępu do folderu. – Andrey

+2

Ahah, rób co chcesz, ale to wyraźnie podniosłoby czerwoną flagę, gdybym miał cię zatrudnić. Możesz wykonać poprawny projekt bez polegania na całym systemie plików; tylko jego trafność. –

36

Trzeba połączyć istniejący kod korzystając dirname() z wezwaniem do basename():

$parent = basename(dirname($_SERVER['PHP_SELF'])); 
4

dirname() stosować basename() będzie działać ... także jeśli chcesz uzyskać do nich wszystko:

$folders = explode ('/', $_SERVER['PHP_SELF']); 

Teraz foldery $ zawierają tablicę wszystkich nazw folderów.

Pozdrawiam.

+1

W tym przypadku należy wystrzegać się pustego elementu w indeksie 0, który będzie wynikał ze ścieżki rozpoczynającej się od '/' – DaveRandom

+0

Dobra uwaga - dzięki za dodanie tej myśli. –

+0

@DaveRandom Kolejny powód robienia testów przed uruchomieniem kodu! :) Ale tak, jeśli to denerwuje kogoś, myślę, że jedynym sposobem byłoby użycie regex. – kiradotee

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

wynikowe:
lib/zdjęć /index.php

obrazów

Powiązane problemy