【问题标题】:permission denied upon mkdirmkdir 权限被拒绝
【发布时间】:2012-08-13 18:49:17
【问题描述】:

我使用mkdir() 在我的服务器上创建一个目录:

// $var_name is equal to an md5() hash
$path = "/var/www/publish/" . $var_name;
if(mkdir($path)) {
  echo "success";
} else {
  echo "error";
}

由于权限被拒绝,这将产生错误。在我的服务器上查找,通过 ls -lh

drwxr-xr-x  2 root     root   4.0K Aug 17 09:05   publish

但如果我的$path 等于$path = "/var/www/" . $var_name;,它将创建我期望的文件夹。这里似乎有什么问题。

【问题讨论】:

  • @PLB 看起来发布已经存在,所以这不是问题。然而,除了root 之外,没有人拥有写入权限肯定会阻止您创建新目录(因为谁以 root 身份运行他们的 Web 服务器工作人员......)
  • @Leigh 是的,对。这就是我删除评论和答案的原因。

标签: php apache debian mkdir


【解决方案1】:

修复发布文件夹的权限(由 root 拥有!)。 不安全方式:chmod 777 /var/www/publish

最好运行 suphp 并将发布文件夹的所有者更改为您的 php 用户(+w 权限)。

【讨论】:

    【解决方案2】:

    /var/www/publish 文件夹的权限错误。您需要确保 apache 用户具有创建目录所需的权限。

    您可以在/var/www/ 中创建目录,因为它具有不同的权限。

    检查 httpd 进程正在运行的用户的名称以及该用户/组的chown -R user:group /var/www/publish。在 debian 上,这似乎是 www-data/www-data,因此您需要运行以下命令 chown -R www-data:www-data /var/www/publish

    【讨论】:

    • 你能详细说明一下吗?
    • "检查 httpd 进程运行的用户名" - 如何?
    • @LeandroGarcia 在这里为克里斯辩护,他正确回答了你的问题。但是,教您基本的系统管理员技能超出了您所要求的范围。
    • 请原谅我,但这似乎是不可避免的,因为它几乎是问题的答案。
    【解决方案3】:

    将 mkdir() 与 PHP 一起使用时,它由 apache 用户(ubuntu 上的 www-data)执行,您可以使用 chown 在 /var/www 上设置相同的发布权限

    在 ubuntu 上:

    chown www-data.www-data /var/www/publish
    

    问候

    mimiz

    【讨论】: