问题
I'm relatively new to configuring Apache.
I have a PHP script that writes a JSON file based on values retrieved from $_GET
.
<?php
file_put_contents('State.json', "{ do: '" . $_GET['do'] . "' }");
echo "Success";
?>
I run that code by create an XHR request.
Ally.xhr('/Cream/Foam?do=someCommand');
The page it returns says failed to open stream: Permission denied on line 3.
<Directory "~/Dropbox/Web">
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
Allow from all
</Directory>
Those are the permissions given to the root server folder.
What do I need to change to allow PHP to write the file?
(I have pretty much no idea what the block above means.)
回答1:
You need to check if the user under which runs apache has permission to write into the directory.
So it's like this:
Your apache server is process. The process runs under some user (say www). The PHP runs under apache. So if you try to write into a directory in PHP it is the same as if the user www logs into the server and tries to create a file in the same directory. So check who is owner of that directory and which permission do it have. You can do it e.g. via ls -la
command. If www
will be owner of that directory, you will be 100% safe ...
回答2:
You can try to set the permissions with
chmod function for php and set your directory to /var/www there you have normally enough permissions.
回答3:
Check the file permission either in command line using:
ls -l /path/filename
Or through your ftp client if you have ftp access to the file/dir. If not, you could change the location like Stony said above.
回答4:
Check the file/directory permissions that it is trying to write to. Make sure that it is writable by the user and/or group that the Apache process is running as.
Also check to see if SELinux is enabled by checking the contents of /selinux/enforce. If it is, either disable it or make sure the proper labels are set on the path that you are writing to.
回答5:
Know that sometimes there is absolutely no way to get around this using PHP only.
The two solutions to this are:
- Configure PHP and Apache permissions manually (warning: can get dirty very quickly).
- Use FTP to change ownership to 0777 (full access) and then revert after running changes.
I've often found the latter option to work best.
来源:https://stackoverflow.com/questions/5357781/giving-php-write-permission-in-apache