在 Apache 中授予 PHP 写权限

Posted

技术标签:

【中文标题】在 Apache 中授予 PHP 写权限【英文标题】:Giving PHP write permission in Apache 【发布时间】:2011-07-18 11:38:11 【问题描述】:

我对配置 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 写入文件?

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

【问题讨论】:

它正在写入的文件/目录的 chmod 权限如何? 将 web 文件夹放入根文件夹并不是一个好主意。像其他文件一样把它放到 /var/www/ 中。那里的权利没有问题。 ..chmod?我不知道那是什么。也许这就是我所缺少的。 chmod 是一个 POSIX 函数,用于设置使用模式权限(ch-change mod-mode)。如果您使用 FTP,您可以看到这些是如何完成的。 【参考方案1】:

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

原来是这样的:

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

【讨论】:

在默认的_www下运行。那么,如果我允许它,这应该可以工作吗? chown www-data:www-data ~/Dropbox/Web 和 chmod 777 ~/Dropbox/Web 请不要在您面向公众的网络服务器上 chmod 777 任何内容。【参考方案2】:

你可以尝试设置权限

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

【讨论】:

【参考方案3】:

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

ls -l /path/filename

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

【讨论】:

【参考方案4】:

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

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

【讨论】:

【参考方案5】:

要知道,有时仅使用 PHP 绝对无法解决此问题。

两个解决方案是:

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

我经常发现后一种选择效果最好。

【讨论】:

以上是关于在 Apache 中授予 PHP 写权限的主要内容,如果未能解决你的问题,请参考以下文章

如何授予 PHP 对目录的写入权限?

为啥 Apache + PHP 需要执行权限才能写入文件?

在 Apache Pulsar 中授予命名空间权限

Apache+PHP 在 unix 上的写权限

在 PHP 中使用 Facebook API 授予 publish_stream 权限

尝试通过 Windows 上的 Alias 向 Dropbox 文件夹上的 Apache 授予权限