J'essaie de créer un répertoire sur mon serveur en utilisant PHP avec la commande:
mkdir("test", 0777);
Mais il ne donne pas toutes les autorisations, seulement celles-ci:
rwxr-xr-x
Le mode est modifié par votre umask
actuel, qui est 022
dans ce cas.
Le fonctionnement de umask
est soustractif. Vous prenez l'autorisation initiale donnée à mkdir
et soustrayez umask
pour obtenir l'autorisation réelle :
0777
- 0022
======
0755 = rwxr-xr-x.
Si vous ne voulez pas que cela se produise, vous devez mettre temporairement votre umask
à zéro pour qu'il n'ait aucun effet. Vous pouvez le faire avec l'extrait de code suivant:
$oldmask = umask(0);
mkdir("test", 0777);
umask($oldmask);
La première ligne change le umask
à zéro tout en stockant la précédente dans $oldmask
. La deuxième ligne crée le répertoire en utilisant les autorisations souhaitées et (désormais sans objet) umask
. La troisième ligne restaure le umask
à ce qu'il était à l'origine.
La création de fichiers et de répertoires est affectée par le paramétrage 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);
Évitez d'utiliser cette fonction dans les serveurs Web multithread. Il est préférable de modifier les autorisations de fichier avec chmod () après avoir créé le fichier.
Exemple:
$dir = "test";
$permit = 0777;
mkdir($dir);
chmod($dir, $permit);
Probablement, votre mask est configuré pour exclure ceux
Pour ceux qui ont essayé
mkdir('path', 777);
et cela n'a pas fonctionné.
C'est parce que, apparemment, le 0 précédant le mode fichier est très important et indique à chmod d'interpréter le nombre passé comme un octal au lieu d'une décimale.
Ps. Ce n'est pas une solution à la question, mais seulement un complément à la réponse acceptée