2012-06-22 24 views
22

Ho fatto un po 'di ricerca per questo, quindi mi dispiace se questo è un dupe.
In ogni caso, ho bisogno di ottenere il nome della cartella in cui si trova il file corrente. Ad esempio, voglio convertire qualcosa come example.com/folder/subfolder/file.php a subfolder.
Il mio codice corrente è dirname($_SERVER['PHP_SELF']), ma restituisce /folder/subfolder anziché subfolder. Grazie!Ottieni cartella principale del file corrente PHP

risposta

47

Il modo più semplice è:

basename(__DIR__); 

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

+2

Non dovrebbe essere contrassegnato come la risposta corretta? '$ _SERVER ['PHP_SELF']' può restituire il file che include "il file corrente". Il "file corrente" è __DIR__ giusto? O mi manca qualcosa? – taylorcressy

+0

@taylorcressy sembra che la risposta sopra sia stata data prima di questa ... anche noi non usiamo la costante magica –

+2

@ MarcelDjaman Capisco perché l'altro è stato contrassegnato come corretto. Sto semplicemente chiarendo che questa è la risposta corretta corretta. Tecnicamente, la prima risposta non è corretta in tutti i casi (vale a dire in un file incluso) – taylorcressy

-5

Basta usare .. è un accesso relativo che indica la cartella principale.

+0

Lo so, ma voglio ottenere il nome della cartella, non accedere alla cartella. – Andrey

+2

Ahah, fai come vuoi, ma questo chiaramente alzerebbe una bandiera rossa se dovessi assumerti. È possibile eseguire una progettazione corretta senza fare affidamento sull'intero file system; solo la sua pertinenza. –

36

è necessario combinare il codice esistente utilizzando dirname() con una chiamata a basename():

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

dirname() utilizzato con basename() avrebbe funzionato ... anche questo se si desidera ottenere tutti:

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

Ora le cartelle $ contengono un array di tutti i nomi delle cartelle.

Cheers.

+1

Se si fa questo si dovrebbe fare attenzione all'elemento vuoto all'indice 0 che risulterà da un percorso che inizia con '/' – DaveRandom

+0

Buon punto - grazie per aver aggiunto quel pensiero. –

+0

@DaveRandom Un altro motivo per fare test prima di mettere in funzione il codice! :) Ma sì, se questo è fastidioso qualcuno, suppongo che l'unico altro modo sarebbe usare la regex. – kiradotee

2
$folder = basename(dirname(__FILE__)); 
0
str_replace('/','',$_SERVER[REQUEST_URI]); 

risultati:
lib/immagini /index.php

immagini

Problemi correlati