2012-06-03 2 views
5

Fondamentalement, ce qu'il dit sur l'étain:PHP is_readable échoue, mais opendir fonctionne

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"; 

Retours:

\\ HTPC \ FILMS est un répertoire

\\ HTPC \ FILMS ouvert

Qu'est-ce qui est bizarre? Je peux itérer à travers les fichiers dans le répertoire mais apparemment ce n'est pas lisible. Cela n'a pas vraiment d'importance, comme je l'ai dit, je peux toujours lire les fichiers, mais je trouve juste un peu étrange.

Quelqu'un a-t-il des idées?

+0

Quel est le système d'exploitation sur la machine "HTPC"? Est-ce que c'est Windows? –

+0

Oui, Windows 7! –

+0

Je ne suis pas sûr, mais peut-être son à cause du système de fichiers Windows (FAT ou NTFS) Vous pouvez avoir la permission de "lister le contenu" mais "lecture" n'est pas autorisé! –

Répondre

3

Il semble que c'était une erreur d'autorisation. Affecté à ce dossier particulier était un groupe résidentiel. Le groupe résidentiel n'était pas réellement utilisé sur le réseau. Lors de la suppression du groupe résidentiel et de l'ajout du groupe d'utilisateurs is_readable, la valeur true est renvoyée. Encore étrange comment opendir renvoyé vrai mais is_readable pas. Vous vous attendriez sûrement à ce que quelque chose qui n'est pas lisible échoue à l'ouverture.

Merci pour votre aide les gars.

+0

Intéressant. 'is_readable()' est juste une enveloppe fine autour de 'stat', donc c'était définitivement un problème de permission; toujours surpris de voir que l'info peut être si trompeuse :) –

0

Vérifiez vos politiques de sécurité si vous voulez empêcher l'entrée dans le répertoire, recherchez le contrôle de la traversée de contournement ou quelque chose comme ça. S'il contourné cette vérification, il est alors possible d'accéder au répertoire interdit par acl, mais le contenu ne peut pas être lu.

Si vos listes de contrôle d'accès sont définies et sélectionnées avec soin et correctement pour l'arborescence entière, vous n'avez normalement pas besoin de toucher ces listes.

+0

Ce genre de chose ne serait-il pas appliqué à tous les lecteurs et pas seulement un? –

+0

Cette fonctionnalité de sécurité est et s'applique à l'ensemble du système à la fois. Il est activé ou désactivé globalement, il ne fournit pas ou n'emporte pas de réelle sécurité. Si vos listes de contrôle d'accès sont définies et sélectionnées avec soin et correctement pour l'arbre entier, vous n'avez normalement pas besoin de toucher cela. –

Questions connexes