2012-10-01 11 views
5

Ho bisogno di una funzione, nativa o creata dall'utente, che controlli se una stringa è un nome di directory valido. Ho dato un'occhiata alla documentazione di PHP e posso trovare solo la funzione is_dir che controlla se si tratta di una directory esistente o meno e non un nome valido per una directory.Controllare una stringa per un nome di directory valido

+3

Definire "nome directory valido" Ogni sistema operativo ha le proprie restrizioni. Definisci cosa è legale e non, e quindi convalidare contro quello. –

+0

una directory che non esiste sarebbe una directory non valida, no? –

+0

È possibile cercare una directory 'generale' espressione regolare. – Darkwater

risposta

7

Questo dovrebbe funzionare per voi.

Vedi regex for validating folder name & file name

if (strpbrk($filename, "\\/?%*:|\"<>") === FALSE) { 
    /* $filename is legal; doesn't contain illegal character. */ 
} 
else { 
    /* $filename contains at least one illegal character. */ 
} 
4

Questo potrebbe funzionare. È possibile modificare il secondo e il terzo argomento in base alle proprie esigenze.

if (!mkdir($directory, 0700, true)) { 
    die('Error: Illegal directory.'); 
} 

Si noti che questo creerà la directory se il nome della directory è valido. Tuttavia, a mio modesto parere (e senza conoscere il tuo particolare caso d'uso), questo è il modo preferito nella maggior parte delle lingue per gestire la verifica della validità del nome della directory. Basta provare a creare la directory, e se fallisce, allora digli che non è riuscita.

I vantaggi di questo è che mantiene agnostico il proprio file system di codice ed è il metodo meno soggetto a errori per convalidare e creare una directory, poiché nessun altro processo o thread sarà in grado di creare una directory tra quando si convalida la directory e quando la crei.

Lo svantaggio è che questo metodo presuppone che si desideri creare immediatamente la directory.

Naturalmente, ci sono diverse ragioni che mkdir() potrebbe fallire (ad esempio, autorizzazioni insufficienti, guasti hardware, non valida nome di directory, ecc), quindi si consiglia di visualizzare diversi messaggi di errore per l'utente in base all'errore. Sfortunatamente, PHP non ha una gestione delle eccezioni altrettanto solida di altri linguaggi, ma se vuoi seguire questa strada, dovresti essere in grado di utilizzare un approccio come questo in answer per rilevare i vari avvisi che possono essere generati da mkdir().

+0

Forse dovresti provare questo: 'mkdir ('dirname/test /../ temp', 0700, vero);' Potrebbe essere utile filtrare il nome '$ directory' per alcune cose come @GregoryBurns suggerisce nella sua risposta ... – Wilt

Problemi correlati