php mkdir() 权限被拒绝 mac

Posted

技术标签:

【中文标题】php mkdir() 权限被拒绝 mac【英文标题】:php mkdir() permissions denied mac 【发布时间】:2012-03-22 09:26:42 【问题描述】:

这似乎是一个常见问题,但我似乎无法找到我正在寻找的确切答案。 我在 OSX 上运行 XAMPP,并且在我的网络应用程序中,如果新的一年不存在目录,我试图允许管理员创建一个目录。因此,在 htdocs/mywebapp/images 下,如果某个目录不存在,例如 2012 年,则 mkdir() 并开始将文件上传到该目录。

从 mywebapp 目录运行 ls -l 显示 images 目录创建为

drwxr-xr-x   18 myusername  admin    612 Feb 12 17:32 images

所以我尝试的第一件事是

sudo chmod 0775 images

这没有帮助。查看 httpd.config 文件显示用户/组定义为 www:www 所以我尝试将所有者/组更改为:

sudo chown www:www images

结果如预期:

drwxrwxr-x  18 _www      _www     612 Feb 12 17:32 images

但是,我再次收到 Permission denied 错误。所以,我不知道我的下一步是什么。 我用来达到这一点的 php 代码在这里:

$directory_self = dirname(__FILE__);
$base_image_path = $directory_self . '/images/'; // outputs "/Applications/XAMPP/xamppfiles/htdocs/mywebapp/images/"
$year = '2012';
$image_path = $base_image_path . $year . '/'; // outputs "/Applications/XAMPP/xamppfiles/htdocs/mywebapp/images/2012/"
if(!file_exists($image_path))
    mkdir($image_path, 0775);

感谢您的帮助。

【问题讨论】:

【参考方案1】:

尝试检查真正的进程所有者:

  $processUser = posix_getpwuid(posix_geteuid());
  echo($processUser['name']);

【讨论】:

啊...它显示“nobody”。所以我应该对nobody chown:[group???] ...但我很好奇如果用户在配置文件中定义为www,为什么进程所有者将是nobody。另外,我如何在终端中找到真正的进程用户?谢谢! 我看到如果我运行 $processGroup = posix_getgrgid($processUser['gid']);回声 $processGroup['name'];该组是“无人”...所以我现在就试试。而且,是的,它起作用了,我能够 mkdir()。 另一个问题是为什么使用 mkdir(filepath, 0755) 指定权限与 mkdir(filepath, 0775) 没有什么不同...都在创建目录后显示 drwxr-xr-x。跨度> 官方文档里有一句话,看一下:php.net/manual/en/function.mkdir.php。关于 umask。

以上是关于php mkdir() 权限被拒绝 mac的主要内容,如果未能解决你的问题,请参考以下文章

Centos 7 / Apache / PHP - mkdir():权限被拒绝

在 Mac 上设置 gvm 时权限被拒绝

PHP的datelog localhost在mac权限被拒绝

Phpmyadmin 5.1.0.RC1 & 5.0.4 错误(./libraries/classes/Config.php#1285 mkdir() 中的警告:权限被拒绝)

fopen:无法打开流:Mac上的PHP中的权限被拒绝[重复]

错误:EACCES:权限被拒绝,mkdir '/.npm'