在Apache中给予PHP写入权限

6

我相对于配置Apache来说还是新手。

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

<?php

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

    echo "Success";

?>

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

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

它返回的页面显示:在第3行打开流失败:权限被拒绝。
<Directory "~/Dropbox/Web">
    Options Indexes FollowSymLinks MultiViews

    AllowOverride None

    Order allow,deny
    Allow from all
</Directory>

这些是授予根服务器文件夹的权限。

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

(我对上面的块基本没有什么想法。)


它正在写入的文件/目录的chmod权限如何? - Kit
不要把网页文件夹放在根目录下,这样做不是很好。将其放置在 /var/www/ 目录下,就像其他文件一样。这样你就不会遇到权限问题了。 - René Höhle
chmod?我不知道那是什么,也许这就是我缺少的东西。 - McKayla
chmod是一个POSIX函数,用于设置用户模式权限(ch-change mod-mode)。如果您使用FTP,您可以看到这些操作是如何完成的。 - Christian
5个回答

13

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

情况是这样的:

您的 Apache 服务器是一个进程,该进程在某个用户下运行(比如说 www 用户)。PHP 运行在 Apache 下。因此,如果您尝试在 PHP 中写入目录,就好像用户 www 登录到服务器并尝试在同一目录中创建文件一样。所以,请检查该目录的所有者和权限。您可以通过 ls -la 命令来进行检查。如果 www 是该目录的所有者,则您将会百分之百安全……


它在默认的 _www 下运行。所以,如果我给它权限,这应该可以工作吗? - McKayla
2
chown www-data:www-data ~/Dropbox/Web 和 chmod 777 ~/Dropbox/Web - René Höhle
12
请勿在您的公共 Web 服务器上对任何内容执行 chmod 777 操作。 - Alex W

1

您可以尝试使用chmod函数来设置PHP的权限,并将您的目录设置为/var/www,这样通常就有足够的权限了。


0

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

ls -l /path/filename

或者通过您的FTP客户端,如果您有文件/目录的FTP访问权限。如果没有,您可以像Stony上面说的那样更改位置。


0

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

还要检查SELinux是否启用,方法是检查/selinux/enforce的内容。如果启用了SELinux,则要么禁用它,要么确保在您要写入的路径上设置了正确的标签。


0

要知道有时候仅使用PHP是无法解决这个问题的。

解决方案有两种:

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

我经常发现后者是最好的选择。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接