tags:

views:

235

answers:

3

I am using file_put_contents to create a file. My php process is running in a group with permissions to write to the directory. When file_put_contents is called, however, the resulting file does not have group write permissions (it creates just fine the first time). This means that if I try to overwrite the file it fails because of a lack of permissions.

Is there a way to create the file with group write permissions?

+1  A: 

To open the file and write over contents then you need write permissions to the file. It's important to understand the distinction. To overwrite the entire file you actually need write permissions to the directory.

Use chmod() to set what's appropriate on the file and/or directory if you want to be explicit about it.

cletus
Hmm... I DO have permissions to the directory, the problem is that I want to call file_put_contents several times from different scripts on the same file, but the successive times fail.
Sean Clark Hess
+1  A: 

You might what to try setting the umask before calling file_put_contents : it will change the default permissions that will be given to the file when it's created.

The other way (better, according to the documentation) is to use chmod to change the permissions, just after the file has been created.


Well, after re-reading the question, I hope I understood it well...

Pascal MARTIN
+1  A: 

Example 1 (set file-permissions to read-write for owner and group, and read for others):

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

Example 2 (make file writable by group without changing other permissions):

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

Example 3 (make file writable by everyone without changing other permissions):

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

128, 16, 2 are for writable for owner, group and other respectively.

danamlund