2012-10-01 12 views
5

Necesito una función, nativa o realizada por el usuario, que comprueba si una cadena es un nombre de directorio válido. He echado un vistazo a la documentación de PHP y solo puedo encontrar la función is_dir que comprueba si es un directorio existente o no y no un nombre válido para un directorio.Verificar una cadena para un nombre de directorio válido

+3

Definir "nombre de directorio válido" Cada sistema operativo tiene sus propias restricciones. Defina lo que es legal y no, y luego valide en contra de eso. –

+0

un directorio que no existe sería un directorio no válido, ¿no? –

+0

Puede buscar una regex de directorio 'general'. – Darkwater

Respuesta

7

Esto debería funcionar para usted.

Ver 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

Esto funcionaría. Puede modificar los argumentos segundo y tercero según sus necesidades.

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

Tenga en cuenta que esto creará el directorio si el nombre del directorio es válido. Sin embargo, en mi humilde opinión (y sin conocer su caso de uso particular), esta es la forma preferida en la mayoría de los idiomas para controlar la validez del nombre del directorio de comprobación. Intente crear el directorio y, si falla, dígales que falló.

El beneficio de esto es que mantiene su sistema de archivos de código independiente y es el método menos propenso a errores para validar y crear un directorio, ya que ningún otro proceso o subproceso será capaz de crear un directorio entre cuando valide el directorio y cuando lo creas

El inconveniente es que este método asume que desea crear el directorio inmediatamente.

Por supuesto, hay varias razones por las que mkdir() pueden fallar (por ejemplo, permisos insuficientes, falla de hardware, nombre de directorio no válido, etc.), por lo que es posible que desee mostrar diferentes mensajes de error al usuario según el error. Desafortunadamente, PHP no tiene un manejo de excepciones tan robusto como lo hacen otros lenguajes, pero si quieres seguir por este camino, deberías poder utilizar un enfoque como el answer para captar las diferentes advertencias que mkdir() puede generar.

+0

Tal vez deberías probar esto: 'mkdir ('dirname/test /../ temp', 0700, true);' Definitivamente podría ser útil filtrar el nombre '$ directory' para ciertas cosas como sugiere @GregoryBurns en su respuesta ... – Wilt

Cuestiones relacionadas