2009-04-14 37 views
24

Lo sé, , esto suena soo fácil. Pero parece que no puedo encontrar la respuesta correcta en Internet.Compruebe si existe un directorio en PHP

Una de la solución que encontré fue usar is_dir.

if(is_dir($dir)) 
    echo 'directory exists'; 
else 
    echo 'drectory not exist'; 

Pero esto es incorrecto - Todo hace esta función es comprobar si el $dir es un directorio, no se comprueba si existe el directorio, o no. En otras palabras, si pongo:

$rootDir = "C:\\Documents and Settings\\test\\My Documents\\Image Directory\\Me Dog\\"; 

entonces la función devolverá un cierto, aunque se puede encontrar dicho directorio no en su servidor web.

¿Alguna idea?

+0

Este fue un informe de errores en PHP 5.2, aunque ya no puedo encontrar el enlace al informe de fallo. –

Respuesta

53

Deberían funcionar correctamente. De is_dir() documentación:

devuelve verdadero si el nombre del archivo existe y es un directorio, FALSO lo contrario.

Bueno, de todas formas si no intente esto:

if(file_exists($dir) && is_dir($dir)) 

cierto. los resultados de estas funciones se guardan en caché de estadísticas. Use clearstatcache() para limpiar ese caché.

+5

+1 para la información de clearstatcache, siempre útil saber –

2

Probablemente querrá usar opendir() después de que is_dir() acepta que la ruta (podría) ser un directorio.

Si el recurso devuelto por opendir() es válido, usted sabe que tiene un directorio y ya tiene un controlador para leerlo.

Simplemente asegúrese de llamar a closedir(), de cualquier manera, si se devuelve un identificador válido.

Editar:

Esta respuesta supone que usted va a estar abriendo el directorio de cualquier manera. Si solo necesita asegurarse de que la ruta es correcta/válida, file_exists() es mucho más económica.

0

Usted podría intentar esto:

if(is_dir($dir) && is_writeable($dir)) 
{ 
    // ... 
} 
+6

no es una solución al problema, porque los directorios no grabables también son directorios. – stefs

Cuestiones relacionadas