2010-10-22 15 views

Répondre

108

Le mode est modifié par votre umask actuel, qui est 022 dans ce cas. Le fonctionnement du umask est soustractif. Vous prenez l'autorisation initiale donnée à mkdir et soustrayez le umask pour obtenir la réelle permission:

0777 
- 0022 
====== 
    0755 = rwxr-xr-x. 

Si vous ne voulez pas que cela se produise, vous devez définir votre umask temporairement à zéro il n'a pas effet. Vous pouvez le faire avec l'extrait suivant:

$oldmask = umask(0); 
mkdir("test", 0777); 
umask($oldmask); 

La première ligne modifie la umask à zéro tout en stockant le précédent dans $oldmask. La deuxième ligne rend le répertoire en utilisant les permissions désirées et (maintenant non pertinentes) umask. La troisième ligne restaure le umask à ce qu'il était à l'origine. Voir le doco PHP pour umask et mkdir pour plus de détails.

2

Probablement, votre umask est configuré pour exclure les

12

La création de fichiers et de répertoires est affecté par le réglage de umask. Vous pouvez créer des fichiers avec un ensemble particulier d'autorisations en manipulant umask comme suit: -

$old = umask(0); 
mkdir("test", 0777); 
umask($old); 
0

Pour ceux qui ont essayé

mkdir('path', 777);

et cela n'a pas fonctionné. C'est parce que, apparemment, le 0 qui précède le mode de fichier est très important, ce qui indique à chmod d'interpréter le nombre transmis comme Octal au lieu d'un nombre décimal.

Reference

Ps. Ceci n'est pas une solution à la question mais seulement un add-on à la réponse acceptée

0

Évitez d'utiliser cette fonction dans les serveurs web multithread. Il est préférable de changer les permissions du fichier avec chmod() après avoir créé le fichier.

Exemple:

$dir = "test"; 
$permit = 0777; 

mkdir($dir); 
chmod($dir, $permit);