在 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 写权限的主要内容,如果未能解决你的问题,请参考以下文章