Position actuelle: Accueil> Derniers articles> Comment dois-je le résoudre lorsque je rencontre la fonction is_readable qui ne peut pas passer la vérification de l'autorisation du répertoire?

Comment dois-je le résoudre lorsque je rencontre la fonction is_readable qui ne peut pas passer la vérification de l'autorisation du répertoire?

gitbox 2025-09-12

Comment dois-je le résoudre lorsque je rencontre la fonction is_readable qui ne peut pas passer la vérification de l'autorisation du répertoire?

Dans le développement de PHP, la fonction is_readable est souvent utilisée pour détecter si un fichier ou un répertoire est lisible. Cette fonction renvoie une valeur booléenne, vrai signifie lisible et faux signifie illisible. Si vous constatez que la vérification de l'autorisation du répertoire ne peut pas être passé lors de l'utilisation de IS_Readable , cela signifie généralement qu'il y a un problème avec le fichier ou les paramètres d'autorisation du répertoire, ou que le chemin et les autorisations du programme lui-même sont mal gérés.

Cet article analysera les causes possibles en détail et fournira des solutions correspondantes pour cette situation.

1. Utilisation de base de la fonction is_readable

Tout d'abord, passons en revue l'utilisation de base de la fonction is_readable :

 <span><span><span class="hljs-variable">$file</span></span><span> = </span><span><span class="hljs-string">'path/to/file_or_directory'</span></span><span>;
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">is_readable</span></span><span>(</span><span><span class="hljs-variable">$file</span></span><span>)) {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Les fichiers ou les répertoires sont lisibles"</span></span><span>;
} </span><span><span class="hljs-keyword">else</span></span><span> {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Les fichiers ou les répertoires ne sont pas lisibles"</span></span><span>;
}
</span></span>

is_readable renvoie true si le fichier ou le répertoire pointé par le chemin existe et a des autorisations de lecture. Si false est renvoyé, le fichier ou le répertoire n'est pas lisible.

2. Problèmes d'autorisation des répertoires

Dans la plupart des cas, lorsque IS_Readable vérifie le répertoire, la fonction renvoie false si le répertoire n'a pas d'autorisations de lecture correctes. Par conséquent, vous devez d'abord confirmer les paramètres d'autorisation du répertoire.

Solution:

  1. Vérifiez les autorisations du répertoire: utilisez la commande LS -L (sur le système Linux ou Mac) pour vérifier les paramètres d'autorisation du répertoire. Assurez-vous que le répertoire a lu les autorisations (au moins R-- autorisations).

     <span><span><span class="hljs-built_in">ls</span></span><span> -ld /path/to/directory
    </span></span>
  2. Modifier les autorisations du répertoire: si vous constatez que le répertoire n'a pas les autorisations correctes, vous pouvez utiliser la commande CHMOD pour modifier les autorisations. Par exemple, ajoutez des autorisations de lecture au répertoire:

     <span><span><span class="hljs-built_in">chmod</span></span><span> +r /path/to/directory
    </span></span>
  3. Vérifiez les autorisations du répertoire parent: si le répertoire parent du répertoire cible n'a pas de permis de lecture, IS_READABLE renverra également faux . Par conséquent, confirmez que le répertoire parent a également les autorisations correctes.

  4. Confirmez les autorisations de l'utilisateur du serveur Web: PHP est généralement exécuté sous les autorisations de l'utilisateur du serveur Web, telles que www-data (dans le système Ubuntu). Assurez-vous que cet utilisateur a la permission d'accéder au répertoire.

3. Problèmes d'annuaire

Parfois, Is_readable Renvoie False non seulement à cause des problèmes d'autorisation, mais aussi parce que le répertoire ou le fichier n'existe pas du tout. Vous pouvez d'abord utiliser la fonction file_exists pour vérifier si le chemin cible existe.

 <span><span><span class="hljs-variable">$file</span></span><span> = </span><span><span class="hljs-string">'path/to/file_or_directory'</span></span><span>;
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">file_exists</span></span><span>(</span><span><span class="hljs-variable">$file</span></span><span>)) {
    </span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">is_readable</span></span><span>(</span><span><span class="hljs-variable">$file</span></span><span>)) {
        </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Les fichiers ou les répertoires sont lisibles"</span></span><span>;
    } </span><span><span class="hljs-keyword">else</span></span><span> {
        </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Les fichiers ou les répertoires ne sont pas lisibles"</span></span><span>;
    }
} </span><span><span class="hljs-keyword">else</span></span><span> {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Le fichier ou le répertoire n&#39;existe pas"</span></span><span>;
}
</span></span>

4. Assurez-vous que le chemin est correct

Lorsque vous utilisez IS_Readable , l'exactitude du chemin est cruciale. Si le chemin contient des erreurs ou un chemin relatif est utilisé, il peut ne pas être possible de déterminer correctement la lisibilité du fichier ou du répertoire.

Solution:

  • Utilisez des chemins absolus: essayez d'éviter d'utiliser des chemins relatifs, en particulier dans les structures de répertoires complexes. L'utilisation de chemins absolus peut réduire les risques d'erreurs de chemin.

     <span><span><span class="hljs-variable">$file</span></span><span> = </span><span><span class="hljs-variable">$_SERVER</span></span><span>[</span><span><span class="hljs-string">'DOCUMENT_ROOT'</span></span><span>] . </span><span><span class="hljs-string">'/path/to/directory'</span></span><span>;
    </span></span>
  • Problème de chemin de débogage: vous pouvez utiliser Echo ou Var_dump pour imprimer le chemin pour confirmer si le chemin est correct.

     <span><span><span class="hljs-title function_ invoke__">var_dump</span></span><span>(</span><span><span class="hljs-title function_ invoke__">realpath</span></span><span>(</span><span><span class="hljs-variable">$file</span></span><span>));
    </span></span>

5. Modules de sécurité tels que Selinux ou Apparmor

Dans certains systèmes Linux, des modules de sécurité tels que Selinux ou Apparmor peuvent restreindre l'accès à certains fichiers et répertoires par des processus PHP, bien que les autorisations de fichier pour ces répertoires semblent être correctes. Ces modules peuvent empêcher les scripts de PHP d'effectuer certaines opérations, ce qui fait que IS_READABLE renvoie faux .

Solution:

  • Vérifiez les journaux Selinux ou Apparmor: vérifiez les fichiers journaux pertinents et confirmez si ces modules de sécurité empêchent la lecture du fichier.

  • Ajustez la politique de sécurité: ajustez la politique de sécurité Selinux ou Apparmor selon les besoins pour permettre aux scripts PHP d'accéder aux répertoires pertinents.

6. Problème de montage du système de fichiers

Si votre système de fichiers ou répertoire est monté via des systèmes de fichiers réseau tels que NFS et SMB, les autorisations du fichier peuvent être affectées par les paramètres du système de fichiers réseau. La fonction is_readable ne peut pas détecter correctement les autorisations de répertoire sur ces systèmes de fichiers.

Solution:

  1. Vérifiez les options de montage: assurez-vous que les options de montage du système de fichiers permettent aux processus PHP d'accéder aux répertoires pertinents. Par exemple, lorsque NFS est monté, assurez-vous que l'option NO_ROOT_SQUASH n'est pas activée.

  2. À l'aide d'un système de fichiers local: essayez d'éviter de placer d'importants scripts PHP et fichiers sur le système de fichiers réseau et essayez d'utiliser le système de fichiers local.

7. Restriction Open_Basedir de PHP

Dans certains environnements de configuration PHP, les restrictions Open_Basedir peuvent affecter la capacité d'accès au fichier des scripts PHP. Si Open_Basedir est activé dans les fichiers de configuration de PHP (tels que php.ini ), les scripts PHP ne peuvent accéder qu'à des fichiers dans le répertoire spécifié, ce qui peut entraîner IS_Readable pour ne pas détecter certains répertoires correctement.

Solution:

  1. Vérifiez les paramètres Open_Basedir : cochez l'élément de configuration Open_Basedir dans le fichier php.ini pour vous assurer que ses paramètres contiennent le chemin du répertoire auquel vous devez accéder.

  2. Ajustez Open_Basedir : si nécessaire, ajustez le paramètre Open_Basedir ou ajustez temporairement ce paramètre via la fonction ini_set () dans le script PHP.

 <span><span><span class="hljs-title function_ invoke__">ini_set</span></span><span>(</span><span><span class="hljs-string">'open_basedir'</span></span><span>, </span><span><span class="hljs-string">'/path/to/your/directory'</span></span><span>);
</span></span>

Résumer

Lorsque IS_READable ne peut pas passer la vérification de l'autorisation du répertoire, nous devons généralement commencer à partir de plusieurs aspects pour dépanner. Tout d'abord, assurez-vous que le répertoire existe et dispose des autorisations correctes; Deuxièmement, vérifiez l'environnement en cours d'exécution du script PHP pour confirmer s'il existe des restrictions de sécurité telles que Open_Basedir et Selinux. Grâce à un débogage complet, des problèmes peuvent être trouvés et résolus plus rapidement.