web-dev-qa-db-fra.com

PHP script incapable de créer un répertoire avec les autorisations 777

J'ai un script qui crée automatiquement un répertoire s'il n'existe pas et définit les autorisations sur 777. Le problème est qu'il ne s'agit que de définir des autorisations sur 755:

if (!file_exists($this->get_upload_dir()))
    mkdir($this->get_upload_dir(), 0777);

Si je vérifie le propriétaire du répertoire qu'il a créé, il affiche www-data [33]. Je ne suis pas sûr de ce que le 33 signifie. Est-ce que www-data est l'utilisateur que le serveur utilise pour créer des répertoires? Si oui, comment puis-je lui permettre de créer un répertoire avec les autorisations 777?

Notez également que j'ai déjà défini la commande suivante:

Sudo chown -R www-data:www-data /var/www/html
1
user321524

www-data est l'utilisateur sur lequel le serveur Web Apache2 s'exécute comme dans Ubuntu. (En général, cet utilisateur a un UID de 33, le nombre que vous voyez.) Ainsi, les fichiers créés à l'aide du serveur Web appartiennent à ce fichier. Lorsque vous créez un fichier, le mask du serveur entre en jeu et toutes les autorisations que vous avez définies sont contrôlées par umask. .

Vous pouvez contourner ce problème de trois manières:

  1. Utilisez la fonction chmod PHP pour définir l'autorisation après la création.
  2. Utilisez la fonction umask PHP pour définir l'umask avant la création. Soyez averti, cela définira umask pour tous les threads d'un serveur multithread et peut avoir des conséquences inattendues.
  3. Définissez umask pour le serveur Web lui-même. Ceci est pire que (2) en ce que chaque processus et chaque site configuré sur le serveur sont affectés.

La meilleure option est d'utiliser (1). Regardez this SO answer pour un exemple de (1), this SO question pour une discussion de (2 ) et cette question SF pour un exemple de (3).

4
muru