views:

49

answers:

5

PHP creates files with apache:apache ownership which seems to be causing issues with other php scripts accessing the file.

How can I allow php to create files with the same ownership as the files that created them?

I've read elsewhere that having safe_mode turned on can affect this but I've turned it off and reuploaded the files and i still get the same issue.

I'm sure this will be a simple question for someone more familiar with apache but I've failed to find the solution by searching around.

Thanks

A: 

If you are using a Windows OS you can start Apache as a service and allow apache to use your own account's permissions when starting.

Thariama
I'm not running it locally, I'm running it on a rackspace server so linux
Oliver
in that case i do not know how
Thariama
A: 

Try using fileowner ( http://www.php.net/manual/en/function.fileowner.php ) to get the id of the owner of the current script, posix-getpwuid to get the username for that id ( http://www.php.net/manual/en/function.posix-getpwuid.php ) and chown ( http://php.net/manual/en/function.chown.php ) to set the user for the files.

A. M.
A: 

Why go through all the programatic hassle to change the owner? apache.apache is a very insecure owner anyway. Why not just chmod 0777 the file providing read, write, and execute to all owners. This will eliminate the issue.

If you are still having troubles, then you may need to check if open_basedir is on. If that is the case, it is not file ownership or permissions, but location. This basically means you need to put the file in a location that apache/php already has included in their path.

cdburgess
Erm, complaining about an insecure `apache` and then advocating 0777 is a rather quaint combination.
Wrikken
What I am saying is if Apache needs to access the files, setting them to 0777 won't make that much of a difference. That's all.
cdburgess
A: 

A.M. mentioned chown() above, please be aware that generally chown() can only be used by root and your webserver running account is highly unlikely to be root, that's a very bad idea.

It is possible to setup sudo to allow chown by other users in specific areas and only to specific users. Just have to create a suitable entry in /etc/sudoers, usually by using the visudo program. If you do not have root access yourself, then your hosting provider will have to do this for you, if they will.

For more information: http://www.sudo.ws/sudo/sudo.html

Orbling
+1  A: 

If ownership matters and multiple users / projects are on the same server, you might want to look into SuExec in Apache: PHP files will then be run by the user indicated in the settings, so default ownership of files is automatically taken care of. It saves a lot of chown/chmod'ing, and the processes run by the user are more easily restricted.

Otherwise, I normally create a group with both the owner & apache, and set the default umask to 007.

Wrikken