2011-12-29 15 views
70

Ho questa struttura di cartelle nel mio progetto PHP. (questo è come mostrato in eclips)Ottieni directory di root Percorso di un progetto PHP

-MySystem 
    +Code 
    +Data_Access 
    -Public_HTML 
     +css 
     +js 
     +Templates 
    -resources 

Quando provo questo codice

echo $_SERVER['DOCUMENT_ROOT'] 

uscita è

D:/spazio di lavoro

Come posso ottenere il percorso di RootDirectory del sistema (MySystem), senza h ardcoding il nome della cartella?

risposta

106

Per PHP> = 5.3.0 provare

PHP magic constants.

__DIR__ 

E rendere il vostro percorso relativamente.

Per PHP 5.3.0 < provare

dirname(__FILE__) 
+3

questo è semplicemente fantastico, ho provato $ _SERVER ['DOCUMENT_ROOT'], dirname(), $ _SERVER ['SCRIPT_NAME'] ecc. Ma questo ha funzionato in modo eccellente! – webblover

+29

Dipende da dove usi '__DIR__'. È relativo al file stesso, quindi se in un include, all'interno di una sottodirectory, non verrà restituita solo la directory principale. – Iris

+0

Non darà la directory radice – inrsaurabh

3

si può provare: $ _SERVER [ 'PATH_TRANSLATED']

citazione:

Filesystem- (non documentare root-) percorso in base allo script corrente, dopo che il server ha fatto qualsiasi mappatura da virtuale a reale. Nota: A partire da PHP 4.3.2, PATH_TRANSLATED non è più impostato implicitamente in SAPI di Apache 2 in contrasto con la situazione in Apache 1, dove è impostato sullo stesso valore della variabile server SCRIPT_FILENAME quando non è popolato da Apache . Questa modifica è stata apportata per soddisfare la specifica CGI che PATH_TRANSLATED dovrebbe esistere solo se PATH_INFO è definito . Gli utenti di Apache 2 possono utilizzare AcceptPathInfo = All'interno di httpd.conf per definire PATH_INFO.

fonte: php.net/manual

41

Quando si dice che

$_SERVER['DOCUMENT_ROOT'] 

contiene questo percorso:

D:/workspace 

Poi D: è quello che state cercando non è vero? In questo caso si potrebbe esplodere la stringa da barre e restituire la prima:

$pathInPieces = explode('/', $_SERVER['DOCUMENT_ROOT']); 
echo $pathInPieces[0]; 

Questa uscita volontà directory principale del server.

Aggiornamento: Quando si utilizza la costante DIRECTORY_SEPARATOR invece della barra hardcoded ('/') questo codice sta lavorando anche sotto Windows.

Aggiornamento 2: La variabile globale $_SERVER non è sempre disponibile. Ad esempio sulla riga di comando (cli). Quindi dovresti usare __DIR__ invece di $_SERVER['DOCUMENT_ROOT']. __DIR__ restituisce il percorso del file php stesso.

+2

E potresti usare '__DIR__' invece di' $ _SERVER ['DOCUMENT_ROOT'] '. – Armin

+0

Scusa Se non ho spiegato correttamente la mia domanda, quello di cui ho realmente bisogno è 'D:/workspace/MySystem' – Nalaka526

+0

se il percorso della directory root è nella forma di/var/public/www ", quindi usando questo metodo la prima stringa in la matrice sarà vuota (0)/(1)/(2)/(3). la radice sarà la seconda stringa $ pathInPieces [1] – tbradley22

22

utilizzare la funzione PHP:

getcwd()

ottiene la directory di lavoro corrente.

1
echo $pathInPieces = explode(DIRECTORY_SEPARATOR , __FILE__); 
echo $pathInPieces[0].DIRECTORY_SEPARATOR; 
4

voglio indicare il modo in cui Wordpress gestisce questo:

define('ABSPATH', dirname(dirname(__FILE__)) . '/'); 

Come Wordpress è molto pesante utilizzato in tutto il web e funziona anche bene localmente Ho molta fiducia in questo metodo.

Problemi correlati