在Apache中授予PHP写入权限

时间:2011-03-18 21:01:51

标签: php apache2 httpd.conf apache2.2

我对配置Apache相对较新。

我有一个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写入文件?

(我几乎不知道上面的块是什么意思。)

5 个答案:

答案 0 :(得分:13)

您需要检查运行apache的用户是否有权写入目录。

所以就是这样:

你的apache服务器是进程。该过程在某些用户(例如www)下运行。 PHP在apache下运行。因此,如果您尝试使用PHP写入目录,那么就像用户www登录到服务器并尝试在同一目录中创建文件一样。因此,请检查该目录的所有者以及该目录的权限。你可以这样做,例如通过ls -la命令。如果www将成为该目录的所有者,那么您将100%安全......

答案 1 :(得分:1)

您可以尝试使用

设置权限 用于php的

chmod函数并将您的目录设置为/ var / www,您通常具有足够的权限。

答案 2 :(得分:0)

使用以下命令行检查文件权限:

ls -l /path/filename

或者通过ftp客户端,如果你有ftp访问文件/目录。如果没有,你可以改变Stony所说的位置。

答案 3 :(得分:0)

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

还要检查/ selinux / enforce的内容,检查SELinux是否已启用。如果是,请将其禁用或确保在您要写入的路径上设置正确的标签。

答案 4 :(得分:0)

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

这两个解决方案是:

  1. 手动配置PHP和Apache权限(警告:可能会很快变脏)。
  2. 使用FTP将所有权更改为0777(完全访问权限),然后在运行更改后还原。
  3. 我经常发现后一种选择效果最佳。