【问题标题】:php permissions to create a filephp创建文件的权限
【发布时间】:2016-08-14 09:45:02
【问题描述】:

我在 lubuntu 上运行 apache 服务器,并尝试使用 php 编写用户可以下载的文本文件。我更改了权限:

sudo chmod 775 /var/www -R

但是我执行脚本的时候还是报错:

警告:fopen(3):未能打开流:权限被拒绝 /var/www/myPage.php 第 217 行无法打开文件!

这里是php代码:

    $filename = $liste[0][0];

    $fh = fopen($filename, "x+") or die("Could not open file!");

    fwrite($fh, "foo") or die("Could not write to file");

    fclose($fh);

我需要更改其他权限吗?还是有另一种方法可以做我想做的事情? 谢谢

【问题讨论】:

  • 尝试通过右键单击该文件夹来检查该文件夹的权限。你会看到写权限不存在/
  • ls -l /var/www/myPage.php 的结果是什么?哪个用户和组拥有该文件?
  • 尝试使用绝对路径写入文件。 fopen-perm-denied
  • 使用chmod 命令,您已经为文件的所有者和组设置了完全访问权限。确保拥有该文件的是 www-data 或 www-data 在文件组中。
  • 请注意 chmod 775 有点宽泛/宽松。在大多数情况下,目录的默认值 755 和文件的默认值 644 应该足够了。这通常是需要解决而不是扩大权限的所有权问题。

标签: php apache ubuntu fopen


【解决方案1】:

写入文件夹需要 Apache 用户对该文件夹具有写入、读取和执行权限。

  1. 因此,首先尝试识别 Apache 用户的名称(通常是 www-data)。

  2. 然后检查该用户是否是您要写入文件的文件夹的所有者或所在的组。

  3. 为该用户授予对该文件夹的写入、读取和执行 (7) 权限。授予不需要在同一文件夹上写入读取和执行权限 (5) 的其他所有人。

  4. (推荐)为 www-data 用户授予对文件的写入和读取 (6) 权限。其他人只需要读取权限 (4)。

如果 www-data 既不是文件的所有者也不是文件的组,那么您应该更改其中任何一个。完成此操作后,如果您使用 www-data 和 root 以外的用户(如“webeditor”)访问服务器,并且该用户既不是所有者也不是组中的用户,您可能会发现自己无法访问 web 文件夹。

我推荐:

  1. 将所有者和组设置为 Apache 用户/组。

    chown -R www-data:www-data /var/www
    
  2. 将 webeditor 用户(或您用来通过 ssh 或 ftp 连接到服务器的任何用户)添加到 www-data 组。

    usermod -a -G www-data webeditor
    
  3. 将文件夹的写入、读取和执行权限授予所有者。避免其他人的写入权限。

    find /var/www -type d -exec chmod 755 {} \;
    
  4. 文件不需要执行权限。 www-data用户只需要读写,其余只需要读取权限,所以644对我们的文件来说就足够了。

    find /var/www -type f -exec chmod 644 {} \;
    

【讨论】:

  • 很好的解释。
猜你喜欢
  • 1970-01-01
  • 2011-06-12
  • 1970-01-01
  • 1970-01-01
  • 2011-04-16
  • 2011-07-07
  • 2011-07-29
  • 1970-01-01
  • 2013-02-19
相关资源
最近更新 更多