2009-12-24 13 views
7

È questo il modo corretto per define un percorso di inclusione per entrambi * nix e Windows?Modo corretto per impostare il percorso di inclusione di PHP per * Nix e Windows

define('INCPATH', realpath(dirname(__FILE__)) . '/'); 

Nota la barra di avanzamento finale inclusa in precedenza. La forward-slash include/richiede lo stesso per entrambi i SO?

EDIT (AGGIORNATO CON RISPOSTA):

Da quello che ho potuto capire, il mio codice qui sotto è il modo corretto per definire universalmente un percorso include/richiedono sia per * nix e Windows OS. Sentiti libero di correggere qualsiasi cosa nei commenti qui sotto.

La cosa che mi ha confuso sono i molti esempi che ho visto mostrando la sostituzione di back-slashes (\) in forward-slashes(/). Basato su alcune delle risposte qui sotto, questo non è necessario.

Quindi il codice corretto finale (per i puristi) è:

define('INCPATH', realpath(dirname(__FILE__)) . DIRECTORY_SEPARATOR); 

Questo codice produce i seguenti risultati:

*nix: /path/to/the/file/

Windows: C:\Path To\the\file\

Una breve spiegazione, il nostro lavoro dall'interno (__FILE__) fuori (realpath()):

FILE Il percorso completo e il nome file del file. Contiene sempre un percorso assoluto con i collegamenti simbolici risolti.

dirname() La stringa restituita è percorso con qualsiasi trascinamento/componente rimosso. Responsabile della rimozione del nome file.

realpath() Restituisce il percorso assoluto canonizzato (normalizzato/standardizzato) in caso di esito positivo. Il percorso risultante non avrà alcun collegamento simbolico, '/./' o '/../' componenti. Presumo che questo è incluso per completezza perché __FILE__ già risolve i collegamenti simbolici. O forse è incluso per risolvere i percorsi relativi? Ad ogni modo, sembra solidificare il nostro obiettivo.

risposta

7

Le barre in avanti funzioneranno per entrambi i sistemi operativi, ed è la strada da percorrere.

Non sono riuscito a trovare un riferimento assoluto a questo, ma è indicato in diversi punti nel manuale PHP, come here e here. E, funziona per me, un utente Linux di Windows &.

Infine, si può finire per specificare percorsi misti su Windows, come c:\\apache\\htdocs\\myapp/index.php, e tutto funziona correttamente.

+0

@Derek, buone informazioni - grazie. Supporrò che la mia definizione sopra funzioni su entrambi i sistemi operativi. – Jeff

+1

Spesso mi chiedo perché i backslash siano ancora usati, dal momento che causano mal di testa di fuga e la barra diretta funzionerebbe altrettanto bene. – Ether

2

Per la sorpresa di molte persone, / funziona correttamente su Windows e MSDOS. All'interno dei percorsi, funziona anche su OpenVMS.

Tuttavia, se si sta facendo qualcosa all'interno di PHP per i percorsi, un array sarebbe una struttura più conveniente di una stringa.

$MYPATH = array ('.', '/usr/lib/', '/usr/share/lib'); 
Problemi correlati