6

我对配置 Apache 比较陌生。

我有一个 PHP 脚本,它根据从$_GET.

<?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 写入文件?

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

4

5 回答 5

13

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

所以它是这样的:

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

于 2011-03-18T21:06:31.810 回答
1

您可以尝试设置权限

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

于 2011-03-18T21:06:44.353 回答
0

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

ls -l /path/filename

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

于 2011-03-18T21:08:47.837 回答
0

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

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

于 2011-03-18T21:10:23.273 回答
0

要知道,有时仅使用 PHP 绝对没有办法解决这个问题。

对此的两个解决方案是:

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

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

于 2011-03-18T21:25:11.623 回答