PHP 脚本无法创建具有 777 权限的目录

PHP 脚本无法创建具有 777 权限的目录

我有一个脚本,如果目录不存在则自动创建一个目录并将权限设置为 777。问题是,它只将权限设置为 755:

if (!file_exists($this->get_upload_dir()))
    mkdir($this->get_upload_dir(), 0777);

如果我检查它创建的目录的所有者,它会显示www-data [33]。我不确定 33 是​​什么意思。www-data服务器是否使用该用户来创建目录?如果是,我如何允许它创建具有 777 权限的目录?

另请注意,我已经设置了以下命令:

sudo chown -R www-data:www-data /var/www/html

答案1

www-data是 Ubuntu 中运行 Web 服务器的用户apache2。(通常该用户的 UID 为 33,即您看到的数字。)因此,使用 Web 服务器创建的文件归该文件所有。当您创造因此,umask服务器开始发挥作用,并且您设置的任何权限都由 umask 控制。

您可以通过三种方式解决此问题:

  1. 使用chmod创建后设置权限的PHP函数。
  2. 使用umaskPHP 函数用于在创建之前设置 umask。请注意,这将为多线程服务器中的所有线程设置 umask,并可能产生意想不到的后果。
  3. 为 Web 服务器本身设置umask。这比 (2) 更糟糕,因为服务器中配置的每个进程和每个站点都会受到影响。

最好的选择是使用(1)。看看这个答案以 (1) 为例,这个问题讨论(2)和这个科幻问题以 (3) 为例。

相关内容