2012-06-03 29 views
5

Básicamente lo que dice en la lata:PHP is_readable falla pero opendir funciona

if(is_dir($dir)) 
    echo $dir . " is a directory\n"; 

if(is_readable($dir)) 
    echo $dir . " is readable\n"; 

if($this->handle = opendir($dir)) 
    echo $dir . " opened\n"; 

Devuelve:

\\ HTPC \ películas es un directorio

\\ HTPC \ PELÍCULAS abrieron

¿Qué es extraño? Puedo iterar a través de los archivos en el directorio pero aparentemente no es legible. Realmente no importa, como dije, todavía puedo leer los archivos, sin embargo, me parece un poco extraño.

¿Alguien tiene alguna idea?

+0

¿Cuál es el sistema operativo en la máquina "HTPC"? ¿Es Windows? –

+0

Sí, Windows 7! –

+0

No estoy seguro, pero tal vez es debido al sistema de archivos de Windows (FAT o NTFS). Puede tener el permiso para "enumerar contenido", pero "lectura" no está permitido. –

Respuesta

3

Parece que fue un error de permiso. Asignado a esa carpeta en particular era un grupo en el hogar. El grupo en el hogar no se estaba utilizando realmente en la red. Al eliminar el grupo en el hogar y volver a agregar el grupo de usuarios, es posible leer devuelto verdadero. Todavía es extraño cómo opendir volvió a ser cierto, pero no es posible leerlo. Seguramente esperarías que algo que no es legible falla al abrirse.

Gracias por su ayuda chicos.

+0

Interesante. 'is_readable()' es solo una capa delgada alrededor de 'stat', por lo que definitivamente fue un problema de permisos; Todavía sorprendido de ver que la información puede ser tan engañosa :) –

0

Revise sus políticas de seguridad si desea evitar ingresar al directorio, busque eludir la comprobación de cruce o algo por el estilo.

Si está pasando por alto ese control, entonces se puede ingresar al directorio que está prohibido por acl, sin embargo, no se pueden leer los contenidos.

Si las ACL están configuradas y seleccionadas con cuidado y correctamente para todo el árbol, normalmente no es necesario que toque esto.

+0

¿No se aplicaría ese tipo de cosas a todas las unidades y no solo a una? –

+0

Esta es la característica de política de seguridad y se aplica a todo el sistema a la vez. Está habilitado o deshabilitado globalmente, no proporciona ni quita seguridad real. Si su ACL está configurada y seleccionada con cuidado y correctamente para todo el árbol, entonces normalmente no necesita tocar esto. –

Cuestiones relacionadas