Maison  >  Article  >  développement back-end  >  Le problème que la fonction php mkdir() n'a pas d'autorisation d'écriture

Le problème que la fonction php mkdir() n'a pas d'autorisation d'écriture

怪我咯
怪我咯original
2017-07-11 14:25:521761parcourir

Lors de l'utilisation de mkdir pour créer un dossier, j'ai découvert que cette fonction a deux paramètres, le deuxième paramètre est pour le nouveau créé autorisations spécifiées dans le dossier de fichiers. 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 :

Le code est le suivant :

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

Cette méthode semble fonctionner une fois et. pour tous. Spécifiez la valeur umask dans le fichier d'ouverture du script, puis vous pouvez contrôler les autorisations directement à l'aide de mkdir. Il convient de noter que lors de l'utilisation de la fonction umask sur un serveur multithread, plusieurs threads partageront un umask, donc. cela peut prêter à confusion.

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

code Le code est le suivant :

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

Enfin, vous devez noter que la valeur d'autorisation est mieux exprimée en octal, c'est-à-dire en commençant par "0", et veillez à ne pas ajouter de guillemets.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en 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