2013-02-01 13 views
6

Scrivo una classe PHP e desidero che sia compatibile con più piattaforme. Devo esplodere un percorso per trovare un nome di cartella particolare. Che cosa scelgo per il delimitatore? Il percorso conterrà "/" su UNIX e "\" su Windows.Uniformità di barre e barre inverse su UNIX/Windows

In questo particolare esempio, voglio ottenere il nome della directory in cui è archiviato un file incluso. Io uso questo:

private function find_lib_dir() { 
    $array_path = explode('/', __DIR__); 
    return $array_path[count($array_path)-1]; 
} 

In questa situazione (e più in generale), che cosa posso fare per essere sicuri che funzionerà sia su Windows e UNIX?

Grazie!

risposta

8

È possibile utilizzare DIRECTORY_SEPARATOR come segue:

$array_path = explode(DIRECTORY_SEPARATOR, __DIR__); 
+0

Si noti che questo funzionerà solo per i percorsi restituiti dal sistema; i percorsi forniti dall'utente possono utilizzare la barra diretta su Windows, che non funzionerà con questo. –

2

Utilizzare basename() e dirname() per la manipolazione del percorso anziché analizzarlo manualmente.

0

si dovrebbe usare il DIRECTORY_SEPARATOR costante

0

vorrei fare qualcosa di simile:

private function find_lib_dir() { 
    // convert windows backslashes into forward slashes 
    $dir = str_replace("\\", "/", __DIR__); 

    $array_path = explode('/', $dir); 
    return $array_path[count($array_path)-1]; 
} 

Per esempio particolare, si potrebbe fare cosa forniscono le altre risposte. Tuttavia, se si sta costruendo stringhe te piace:

__DIR__ . '/path/to/dir'; 

E poi cercare di esplodere, allora si avrà problemi in UNIX vs sistemi Windows. In questa situazione, sarebbe meglio (imo) sostituire tutti i backslash con le barre (che sono supportate su entrambi i sistemi). E poi esplodere in base alla barra in avanti.

+0

Perché il downvote? Questa soluzione è letteralmente la stessa della risposta votata più alta. L'unica differenza è che questa soluzione risolve il problema in cui il percorso proviene da qualche parte non generata dal sistema operativo. – Supericy

Problemi correlati