Dans le développement de PHP, il est souvent nécessaire de modifier les autorisations de fichiers ou de répertoires via la fonction CHMOD . La fonction CHMOD peut être utilisée pour modifier les autorisations d'accès des fichiers pour contrôler les autorisations de lecture, d'écriture et d'exécution des fichiers. Mais dans une utilisation réelle, nous rencontrons parfois la situation où l'autorisation de modification du fichier CHMOD ne prend pas effet. Comment dépanner le problème pour le moment? Cet article présentera en détail certaines méthodes de dépannage courantes.
Tout d'abord, l'environnement en cours d'exécution PHP doit avoir la permission de modifier les autorisations de fichiers. Dans les systèmes Linux / Unix, les autorisations de fichiers sont contrôlées par l'utilisateur auquel appartient le fichier et le groupe d'utilisateurs auquel appartient le fichier. Si l'utilisateur du script PHP n'a pas suffisamment d'autorisations pour modifier le fichier, l'opération CHMOD échouera.
Utilisez le PS Aux | Commande Grep PHP pour afficher quel utilisateur le processus PHP s'exécute.
Assurez-vous que l'utilisateur a des autorisations d'écriture sur le fichier cible. Vous pouvez utiliser la commande ls -l pour afficher les autorisations de fichiers.
Si les autorisations sont insuffisantes, vous pouvez ajuster le propriétaire ou les autorisations du fichier via la commande chown ou chmod .
Dans certains cas, le système de fichiers peut être monté en mode en lecture seule, ce qui entraînera la fin des modifications de l'autorisation du fichier. Par exemple, lorsque le système de fichiers est monté en mode RO (lecture seule), tous les fichiers échoueront, y compris les autorisations de modification.
Utilisez la commande de montage pour afficher le système de fichiers de montage et ses options de montage dans le système actuel.
Si vous constatez que la partition où le fichier cible est situé est monté en mode en lecture seule, utilisez la commande Mount -O Remount, RW pour retirer le système de fichiers en mode lecture-écriture.
Dans certains systèmes plus complexes, en plus des autorisations traditionnelles de fichiers (RWX), la LCA peut également être utilisée pour restreindre davantage les autorisations d'accès aux fichiers. ACL fournit un contrôle granulaire plus fin que les autorisations de fichiers traditionnelles, donc même si CHMOD modifie les autorisations traditionnelles, ACL peut toujours empêcher la permission de prendre effet.
Utilisez la commande getFACL <FI-File> pour afficher l'ACL du fichier.
Si le fichier a un ensemble ACL, vous pouvez utiliser la commande setFacl pour modifier les règles ACL ou effacer l'ACL avec SetFacl -b <fichier> .
Le mécanisme de verrouillage des fichiers peut affecter les opérations CHMOD . Si le fichier est occupé par un processus et verrouillé, l'autorisation de modification peut échouer. Une situation courante est que lors de l'utilisation de fonctions de fonctionnement du fichier (telles que fopen et troupeau ), le fichier peut être verrouillé, ce qui entraîne la mise à jour des autorisations.
Utilisez la commande LSOF <Fichier> pour voir quels processus occupent les fichiers.
S'il s'agit d'un problème causé par le verrouillage des fichiers, vous pouvez attendre que le verrouillage du fichier soit libéré avant d'essayer de modifier les autorisations, ou essayer de mettre fin au processus qui occupait le fichier.
Dans certains cas, les scripts PHP ne peuvent pas modifier les autorisations du fichier, ce qui peut être dû à des autorisations insuffisantes du répertoire parent où se trouve le script PHP, ce qui entraîne l'incapacité d'accéder au fichier cible.
Assurez-vous que le répertoire parent du script PHP a les autorisations appropriées pour permettre au script d'accéder au fichier cible.
Utilisez la commande LS -LD <Ar répertoire> pour afficher les autorisations du répertoire parent pour vous assurer que l'utilisateur de processus PHP a des autorisations d'exécution (x).
Umask est un paramètre système qui affecte la création d'autorisation des fichiers et du répertoire. Dans certains cas, la valeur de Umask peut restreindre la modification des autorisations de fichiers. Surtout lors de la création de nouveaux fichiers, le paramètre de UMask peut faire en sorte que les autorisations de fichiers soient pires que prévu.
Utilisez la commande umask pour afficher la valeur umask du système actuel.
Si le paramètre UMask est trop strict, vous pouvez modifier temporairement la valeur UMask via la fonction umask () dans les scripts PHP pour vous assurer que vous avez des autorisations appropriées lors de la création ou de la modification des fichiers.
Différentes versions de PHP peuvent avoir des comportements différents, en particulier en termes d'opérations de système de fichiers. Certaines versions PHP peuvent avoir des problèmes connus avec la fonction CHMOD , ou sous une configuration spécifique, le comportement CHMOD n'est pas comme prévu.
Confirmez la version PHP que vous utilisez et vérifiez s'il existe des bogues connus ou des problèmes de configuration connexes.
Si possible, essayez de mettre à jour la version PHP ou de régler le fichier de configuration PHP (tel que php.ini ) pour vous assurer que les autorisations de fonctionnement du fichier sont normales.
Il existe de nombreuses raisons pour lesquelles les autorisations de fichiers de modification CHMOD ne prennent pas effet. Les étapes de dépannage courantes incluent la confirmation des autorisations de processus PHP, la vérification des options de montage du système de fichiers, la vérification des ACL, la confirmation de l'état de verrouillage des fichiers, la vérification des autorisations de répertoire parent, la vérification des paramètres UMask et la garantie qu'il n'y a aucun problème avec la version PHP. Grâce à ces méthodes de dépannage, la cause profonde du problème peut généralement être trouvée et le problème des autorisations qui ne prennent pas effet peuvent être résolus efficacement.