Position actuelle: Accueil> Derniers articles> Quels sont les pièges courants faciles à ignorer lors de la vérification des autorisations de fichier à l'aide de la fonction is_readable?

Quels sont les pièges courants faciles à ignorer lors de la vérification des autorisations de fichier à l'aide de la fonction is_readable?

gitbox 2025-08-27

1. Confusion entre l'existence des fichiers et les autorisations

is_readable () ne distinguera pas si le fichier n'existe pas ou si les autorisations sont insuffisantes. Par exemple:

 <span><span><span class="hljs-variable">$file</span></span><span> = </span><span><span class="hljs-string">'/path/to/nonexistent.txt'</span></span><span>;
</span><span><span class="hljs-title function_ invoke__">var_dump</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-comment">// Sortir false</span></span><span>
</span></span>

Dans ce cas, si vous le traitez simplement sur la base de faux résultats, vous pouvez penser à tort qu'il s'agit d'un problème d'autorisation, et le fichier réel n'existe pas du tout.

Solution : utilisez d'abord File_exists () pour déterminer si le fichier existe, puis vérifiez la lisibilité.

 <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>) &amp;&amp; </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">"Le fichier existe et est lisible"</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 n&#39;existe pas ou est illisible"</span></span><span>;
}
</span></span>

2. Path relatif et problèmes de répertoire de travail

is_readable () utilise le chemin par rapport au répertoire de travail actuel de PHP. Si le chemin n'est pas clair, le résultat de vérification peut être des erreurs. Par exemple:

 <span><span><span class="hljs-variable">$file</span></span><span> = </span><span><span class="hljs-string">'data/file.txt'</span></span><span>;
</span><span><span class="hljs-title function_ invoke__">var_dump</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>

Si vos scripts PHP fonctionnent et que le répertoire attendu est différent, il peut retourner faux . C'est un problème que de nombreux débutants sont enclins à ignorer.

Solution : utilisez un chemin absolu ou obtenez le répertoire de script actuel via __dir__ :

 <span><span><span class="hljs-variable">$file</span></span><span> = </span><span><span class="hljs-keyword">__DIR__</span></span><span> . </span><span><span class="hljs-string">'/data/file.txt'</span></span><span>;
</span></span>

3. Liens de symbole et héritage d'autorisation

is_readable () vérifie la lisibilité du fichier cible de liaison symbolique, et non les autorisations du lien symbolique lui-même. Cela signifie que même si les autorisations de liaison symbolique permettent l'accès, le résultat sera toujours illisible si le fichier cible est insuffisant.

 <span><span><span class="hljs-comment">// Hypothèses link.txt Cela signifie secret.txt Liens de symbole</span></span><span>
</span><span><span class="hljs-title function_ invoke__">var_dump</span></span><span>(</span><span><span class="hljs-title function_ invoke__">is_readable</span></span><span>(</span><span><span class="hljs-string">'link.txt'</span></span><span>)); </span><span><span class="hljs-comment">// selon secret.txt Autorisation</span></span><span>
</span></span>

Remarque : Lors de la gestion des liens symboliques, il est préférable de clarifier les autorisations de fichiers cibles pour éviter les défaillances d'accès inattendues.


4. Les autorisations sont différentes sous différents systèmes d'exploitation

Sur les systèmes Windows, IS_Readable () est principalement vérifié en fonction des attributs de fichiers, tandis que sur les systèmes UNIX / Linux, il jugera en fonction des autorisations utilisateur (UID / GID) et des bits d'autorisation de fichier. Dans certains cas, le même code peut renvoyer différents résultats sur différentes plates-formes.


5. Fichier verrouillé ou occupé

is_readable () vérifie uniquement les autorisations du système de fichiers et ne considère pas si le fichier est verrouillé par d'autres processus. Si le fichier est occupé (par exemple écrit exclusivement par un autre programme), is_readable () peut toujours renvoyer vrai , mais l'opération de lecture réelle peut échouer.


6. ACL (liste de contrôle d'accès) ou limitations de selinux

Sur les systèmes utilisant des mécanismes de sécurité avancés, les autorisations de fichiers peuvent être limitées par ACL ou SELINUX, IS_READABLE () peut toujours renvoyer vrai , mais tenter de lire le fichier sera refusé.