Position actuelle: Accueil> Derniers articles> Que dois-je faire si je rencontre des problèmes d'autorisation lors de l'utilisation de la fonction DISK_TOTAL_SPACE? Comment dépanner et le résoudre?

Que dois-je faire si je rencontre des problèmes d'autorisation lors de l'utilisation de la fonction DISK_TOTAL_SPACE? Comment dépanner et le résoudre?

gitbox 2025-08-28

Dans PHP, la fonction disk_total_space () peut être utilisée pour obtenir la taille totale de l'espace d'un système de fichiers ou de partition de disque. Cette fonction est très utile lors de la surveillance des serveurs, de l'avertissement spatial et d'autres fonctions. Cependant, dans une utilisation réelle, certains développeurs rencontreront le problème de ceci: le code n'a clairement pas d'erreurs de syntaxe, mais lorsque vous appelez disk_total_space () , il revient et jette même un avertissement, incité "l'autorisation refusée" ou des erreurs similaires liées à l'autorisation.

Alors, comment ce problème d'autorisation s'est-il survenu? Comment dépanner et le résoudre? Cet article analysera les causes possibles de ce problème étape par étape et fournira des solutions pratiques.

1. Phénomène à problème

Habituellement, vous pouvez avoir écrit le code suivant:

 <span><span><span class="hljs-variable">$disk</span></span><span> = </span><span><span class="hljs-string">'/var/www/'</span></span><span>;
</span><span><span class="hljs-variable">$space</span></span><span> = </span><span><span class="hljs-title function_ invoke__">disk_total_space</span></span><span>(</span><span><span class="hljs-variable">$disk</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">var_dump</span></span><span>(</span><span><span class="hljs-variable">$space</span></span><span>);
</span></span>

Idéalement, cela devrait renvoyer un entier représentant le nombre total d'octets dans le système de fichiers où se trouve le chemin. Mais le rendement réel est faux , parfois accompagné du message d'avertissement suivant:

 <span><span>Warning: </span><span><span class="hljs-built_in">disk_total_space</span></span><span>(): open_basedir restriction in effect. </span><span><span class="hljs-built_in">File</span></span><span>(/var/www/) is not within the allowed </span><span><span class="hljs-built_in">path</span></span><span>(s): ...
</span></span>

ou:

 <span><span><span class="hljs-built_in">Warning</span></span><span>: disk_total_space(): failed </span><span><span class="hljs-keyword">to</span></span><span> </span><span><span class="hljs-keyword">open</span></span><span> dir: Permission denied
</span></span>

2. Causes possibles et méthodes de dépannage

1. Le chemin n'existe pas ou est orthographié à tort

C'est la question la plus fondamentale. disk_total_space () nécessite un chemin de répertoire valide existant. Si le chemin que vous passez n'existe pas, la fonction ne fonctionnera naturellement pas.

Méthode de dépannage:

  • Utiliser is_dir () ou file_exists () pour vérifier si le chemin existe;

  • Confirmez que le chemin est correctement orthographié, en particulier dans Linux pour faire attention à la sensibilité des caisses.

 <span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-title function_ invoke__">is_dir</span></span><span>(</span><span><span class="hljs-variable">$disk</span></span><span>)) {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Le répertoire n&#39;existe pas:<span class="hljs-subst">$disk</span></span></span><span>";
}
</span></span>

2. Les autorisations insuffisantes rendent impossible d'accéder au chemin

Les utilisateurs de processus (tels que www-data , apache , etc.) exécutant PHP sous un serveur Web (comme Apache ou Nginx) peuvent ne pas avoir la permission d'accéder au répertoire que vous fournissez.

Méthode de dépannage:

  • Utilisez ls -ld / path / vers / dir pour afficher les autorisations pour ce chemin;

  • Utilisez Whoami et PS Aux | Grep PHP pour confirmer l'utilisateur en cours d'exécution de PHP;

  • Utilisez le mode CLI pour tester s'il y a une différence. Le mode CLI utilise les autorisations utilisateur de connexion actuelles, qui sont généralement plus élevées;

  • Essayez d'accès / test de contenu si le répertoire est une restriction générale.

Solution:

  • Utilisez Chown ou ChMOD pour fournir des autorisations appropriées (ajustées en tant qu'exigences de sécurité);

  • Placez le chemin cible dans la zone où PHP a la permission d'accès.

 <span><span>sudo </span><span><span class="hljs-built_in">chmod</span></span><span> o+rx /var/www/
</span></span>

(Remarque: Pour des raisons de sécurité, veuillez modifier attentivement les autorisations pour éviter d'ouvrir les autorisations d'écriture à l'ensemble du répertoire)

3. Restriction Open_Basedir

Open_Basedir est un élément de configuration en PHP qui limite la plage des répertoires du système de fichiers auxquels les scripts PHP peuvent accéder. Si le chemin entrant est en dehors de cette plage, disk_total_space () sera restreint.

Méthode de dépannage:

  • Vérifiez php.ini ou utilisez phpinfo () pour trouver la valeur d' Open_Basedir ;

  • Si vous voyez un chemin restreint comme / home / utilisateur: / tmp et que votre disque $ n'est pas inclus, une erreur sera déclenchée.

Solution:

  • Modifiez la configuration du pool de php.ini , .htaccess ou php-fpm, et ajoutez le répertoire requis à la liste Open_Basedir ;

  • Si vous utilisez un panneau d'hôte virtuel (comme CPanel, Plesk), vous devez définir le chemin admissible en arrière-plan.

 <span><span>php_admin_value open_basedir "/var/www/:/tmp/"
</span></span>

4. SELINUX ou APPARMOR RESTRICTIONS

Sur certains systèmes Linux avec SELINUX ou APPARMOR activés, PHP peut ne pas être en mesure d'accéder à certains chemins en raison des restrictions de politique de sécurité.

Méthode de dépannage:

  • Vérifiez si le système est activé: Commande GETENFORCE ;

  • Affichez le journal d'audit: /var/log/audit/audit.log ou utilisez l'outil Audit2whwhw pour analyser;

  • Utilisez ls -z pour afficher le contexte selinux du chemin.

Solution:

  • Arrêter temporairement Selinux (l'environnement de production n'est pas recommandé);

  • Modifier la stratégie ou utiliser CHCON pour spécifier le contexte approprié;

  • Pour Apparmor, vous devez modifier le profil.

 <span><span>sudo </span><span><span class="hljs-built_in">chcon</span></span><span> -t httpd_sys_content_t /var/www/ -R
</span></span>

3. Suggestions des meilleures pratiques

  1. La vérification du chemin est préférée : confirmez que le chemin est légal et existe avant d'appeler.

  2. Suivi des journaux : la visualisation des journaux d'erreur PHP peut rapidement localiser la source du problème.

  3. Décentralisation raisonnable : accorder les autorisations minimales requises par PHP pour éviter d'exposer l'ensemble du système.

  4. Isolement de l'environnement de production : il est plus sûr de limiter l'accès dans les environnements de conteneurs ou de chroot.

  5. Analyse de la différence CLI et Web : certains chemins sont accessibles en mode CLI, tandis que le mode Web est limité, vous pouvez donc comparer les problèmes de positionnement des tests.

Conclusion

DISK_TOTAL_SPACE () est une fonction petite et couramment utilisée, mais implique des autorisations d'accès au système de fichiers, de la configuration de sécurité PHP et même des politiques de sécurité du système. Par conséquent, lorsque vous le rencontrez qui renvoie False ou signale une erreur, ne vous concentrez pas seulement sur le code PHP lui-même, mais commencez à partir de plusieurs dimensions telles que les autorisations du système d'exploitation, la configuration du service Web, les politiques de sécurité, etc. afin de localiser efficacement le problème et de le résoudre.

J'espère que cet article peut vous aider à gérer et à gérer des problèmes similaires plus calmement.