2011-03-18 105 views
5

我对配置Apache比较陌生。在Apache中给予PHP写入权限

我有一个PHP脚本,根据从$_GET检索到的值写入JSON文件。

<?php 

    file_put_contents('State.json', "{ do: '" . $_GET['do'] . "' }"); 

    echo "Success"; 

?> 

我通过创建XHR请求来运行该代码。

Ally.xhr('/Cream/Foam?do=someCommand'); 

返回页面说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> 

这些都是给根服务器文件夹的权限。

我需要更改以允许PHP写入文件?

(我几乎不知道上述手段块)。

+0

它正在写入的文件/目录的chmod权限如何? – Kit 2011-03-18 21:05:12

+0

将webfolder放入根文件夹并不是个好主意。把它放到/ var/www /就像其他文件一样。你有没有问题的权利。 – Stony 2011-03-18 21:05:39

+0

..chmod?我不知道那是什么。也许这就是我错过的。 – Kayla 2011-03-18 21:05:49

回答

13

您需要检查用户是否在它运行的Apache有权写入该目录。

所以它是这样的:

你的apache服务器是进程。该进程在某个用户(例如www)下运行。 PHP在apache下运行。因此,如果您尝试在PHP中写入目录,则与用户www登录到服务器并尝试在同一目录中创建文件的方式相同。因此,请检查谁是该目录的所有者,以及拥有哪个权限。你可以做到,例如通过ls -la命令。如果www将这个目录的所有者,你会是100%安全的...

+0

它在默认_www下运行。所以如果我给它许可这应该工作? – Kayla 2011-03-18 21:07:45

+0

一,我会更新答案 – 2011-03-18 21:10:55

+2

chown www-data:www-data〜/ Dropbox/Web和chmod 777〜/ Dropbox/Web – Stony 2011-03-18 21:11:43

1

你可以尝试与

chmod功能设置权限为PHP和目录设置到/ var/WWW有你有通常足够的权限。

0

检查命令行的文件权限或者使用:

ls -l /path/filename 

或通过您的FTP客户端,如果你有FTP访问的文件/目录。如果没有,你可以改变像斯托尼上面说的位置。

0

检查它正在尝试写入的文件/目录权限。确保它可由Apache进程运行的用户和/或组写入。

同时检查SELinux是否通过检查/ selinux/enforce的内容来启用。如果是,请禁用它或确保在您正在写入的路径上设置正确的标签。

0

知道有时候绝对没有办法用PHP来解决这个问题。

的两个解决办法是:

  1. 配置PHP和Apache许可手动(警告:可能会变脏得很快)。
  2. 使用FTP将所有权更改为0777(完全访问),然后在运行更改后恢复。

我经常发现后面的选项效果最好。