Maison  >  Article  >  développement back-end  >  Solution au problème de PHP mkdir() sans autorisation d'écriture

Solution au problème de PHP mkdir() sans autorisation d'écriture

高洛峰
高洛峰original
2016-12-21 15:18:381430parcourir

Lors de l'utilisation de mkdir pour créer un dossier, j'ai constaté que cette fonction avait deux paramètres. Le deuxième paramètre spécifie les autorisations pour le dossier nouvellement créé.

Mais si vous utilisez mkdir('file address', 0777); directement, vous constaterez que les autorisations du nouveau dossier ne sont pas 777, mais généralement 022.

Parce que lorsque mkdir définit les autorisations pour un dossier, il effectue un ET au niveau du bit avec la valeur umask (attribut d'autorisation par défaut de l'utilisateur) de l'utilisateur actuellement connecté au système d'exploitation, et la valeur résultante est la valeur d'autorisation finale .

Qu'est-ce qu'umask ?

Comment obtenir les autorisations par défaut pour les fichiers que nous créons ? Comment modifier cette autorisation par défaut ?

Lorsque nous nous connectons au système et créons un fichier, il y a toujours une autorisation par défaut. Alors, d'où vient cette autorisation ? C'est ce que fait umask.

umask définit les autorisations par défaut pour les fichiers créés par les utilisateurs. Cela a l'effet inverse de chmod. umask définit l'autorisation "code complémentaire", tandis que chmod définit le code d'autorisation du fichier. Généralement, la valeur umask est définie dans /etc/profile, $HOME/.bash_profile ou $HOME/.profile.

Comment calculer la valeur umask ? La commande

umask vous permet de définir le mode par défaut lors de la création de fichiers. Il y a un numéro correspondant dans la valeur umask pour chaque type d'utilisateur (propriétaire du fichier, utilisateur du même groupe, autres utilisateurs). Pour les fichiers, la valeur maximale de ce nombre est 6. Le système ne vous permet pas d'accorder l'autorisation d'exécution à un fichier texte lorsque vous le créez. Vous devez utiliser la commande chmod pour augmenter cette autorisation après la création. Les répertoires permettent de définir des autorisations d'exécution, donc pour les répertoires, le nombre maximum dans umask peut aller jusqu'à 7.

La forme générale de cette commande est : umask nnn, où nnn peut être compris entre 000 et 777.

Nous devons juste nous rappeler que umask "enlève" le bit correspondant des autorisations.

Par exemple : si la valeur umask est 022, l'autorisation de répertoire par défaut est 755 et l'autorisation de fichier par défaut est 644.
Donc, si l'umask de l'utilisateur est 022 (généralement c'est la valeur par défaut), soit : 000 010 010 est égal à 777 spécifié par mkdir, soit : 111 111 111. Après le « ET », la véritable autorisation obtenue est : 022.

Si vous souhaitez maximiser les autorisations du nouveau dossier, il existe deux manières d'y parvenir : (bien sûr, à condition que l'utilisateur actuel puisse accorder les autorisations les plus élevées)

1 . Modifier l'utilisateur umask, php La fonction umask est fournie :

$oldumask=umask(0); 
mkdir('test',0777); 
umask($oldumask);

Cette méthode semble fonctionner une fois pour toutes Spécifiez la valeur umask dans le fichier d'ouverture du script, puis utilisez directement mkdir pour. contrôler les autorisations. Il convient de noter que : sur un serveur multithread Lors de l'utilisation de la fonction umask, plusieurs threads partageront un umask, une confusion peut donc survenir.

2. Utilisez la fonction chmod, qui est également la méthode la plus couramment utilisée :

mkdir('文件地址', 0777); 
chmod('文件地址', 0777);

Enfin, il convient de noter que la valeur de permission est mieux exprimée en octal, qui commence par "0" et doit être Ne pas mettre de guillemets.

Pour plus d'articles sur la façon de résoudre le problème de PHP mkdir() sans autorisation en écriture, veuillez faire attention au site Web PHP chinois !


Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn