php权限创建文件

Jes*_*ers 2 php apache ubuntu fopen

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

sudo chmod 775 /var/www -R
Run Code Online (Sandbox Code Playgroud)

但是当我执行脚本时仍然会出错:

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

这是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);
Run Code Online (Sandbox Code Playgroud)

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

Mar*_*pte 6

写入文件夹需要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
    
    Run Code Online (Sandbox Code Playgroud)
  2. 将webeditor用户(或用于连接到ssh或ftp上的服务器的用户)添加到www-data组.

    usermod -a -G www-data webeditor
    
    Run Code Online (Sandbox Code Playgroud)
  3. 为文件夹提供对所有者的写入,读取和执行权限.避免对其他人的写作权限.

    find /var/www -type d -exec chmod 755 {} \;
    
    Run Code Online (Sandbox Code Playgroud)
  4. 文件不需要执行权限.对于www-data用户,只需要读写,其余的只需要读取权限,因此644对我们的文件来说已经足够了.

    find /var/www -type f -exec chmod 644 {} \;
    
    Run Code Online (Sandbox Code Playgroud)