创建文件的 PHP 权限


php permissions to create a file

我在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);

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

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

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

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

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

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

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

我建议:

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

    chown -R www-data:www-data /var/www
    
  2. 将网络编辑器用户(或用于在 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 {} ';