mkdir时出现权限拒绝

5

我使用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;,它将创建我预期的文件夹。这里似乎存在什么问题。


2
@PLB 看起来 publish 已经存在,所以那不是问题。然而,除了 root 以外没有人拥有写入权限肯定会阻止您创建新目录(因为谁会将其 Web 服务器工作进程运行为 root...)。 - Leigh
@Leigh 是的,没错。这就是为什么我删除了我的评论和回答。 - Leri
3个回答

10

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

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

检查httpd进程运行的用户的名称,并将/var/www/publish的所有权更改为该用户/组:chown -R user:group /var/www/publish,在Debian上,这似乎是www-data / www-data,因此您需要运行以下命令:chown -R www-data:www-data /var/www/publish


你能详细说明一下吗? - Leandro Garcia
如何检查httpd进程正在运行的用户名称? - Leandro Garcia
@LeandroGarcia 在这里为 Chris 辩护,他已经正确回答了你的问题。然而,教授基本的系统管理员技能超出了你所询问的范围。 - Leigh
3
抱歉,但似乎不可避免地需要问这个问题,因为它几乎是问题的答案。 - Leandro Garcia

2
使用PHP的mkdir()函数时,它会被Apache用户(Ubuntu上为www-data)执行。您可以使用chown设置与/var/www相同的权限,以在发布上拥有相同的权限。
在Ubuntu上:
chown www-data.www-data /var/www/publish

问候

mimiz


0

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接