2009-08-06 10 views
19

J'utilise file_put_contents pour créer un fichier. Mon processus php s'exécute dans un groupe avec des autorisations pour écrire dans le répertoire. Lorsque file_put_contents est appelée, cependant, le fichier résultant n'a pas d'autorisations d'écriture de groupe (il crée très bien la première fois). Cela signifie que si j'essaie d'écraser le fichier, il échoue en raison d'un manque d'autorisations.comment puis-je créer un fichier avec file_put_contents qui a des autorisations d'écriture de groupe?

Existe-t-il un moyen de créer le fichier avec des autorisations d'écriture de groupe?

Répondre

21

Vous pouvez essayer de définir le umask avant d'appeler le file_put_contents: cela modifiera les autorisations par défaut qui seront données au fichier lors de sa création.

L'autre façon (mieux, selon la documentation) est d'utiliser chmod pour changer les permissions, juste après la création du fichier.


Eh bien, après avoir relu la question, je l'espère, je l'ai compris bien ...

2

Pour ouvrir le fichier et écraser le contenu, vous devez disposer d'autorisations d'écriture sur le fichier. Il est important de comprendre la distinction. Pour remplacer le fichier entier, vous devez disposer des droits d'écriture sur le répertoire .

Utilisez chmod() pour définir ce qui est approprié sur le fichier et/ou le répertoire si vous voulez être explicite à ce sujet.

+0

Hmm ... J'ai des permissions sur le répertoire, le problème est que je veux appeler file_put_contents plusieurs fois depuis des scripts différents sur le même fichier, mais les temps successifs échouent. –

21

Exemple 1 (ensemble de fichiers permissions de lecture-écriture pour le propriétaire et le groupe, et lu pour d'autres):

file_put_contents($filename, $data); 
chmod($filename, 0664); 

Exemple 2 (marque fichier accessible en écriture par le groupe sans modifier les autres autorisations):

file_put_contents($filename, $data); 
chmod($filename, fileperms($filename) | 16); 

Exemple 3 (Créer un fichier accessible en écriture par tout le monde sans modifier les autres autorisations):

file_put_contents($filename, $data); 
chmod($filename, fileperms($filename) | 128 + 16 + 2); 

128, 16, 2 sont pour inscriptible pour le propriétaire, le groupe et les autres respectivement.

Questions connexes