PHP mkdir:权限被拒绝的问题

我试图创build一个PHP mkdir函数的目录,但我得到一个错误,如下所示: Warning: mkdir() [function.mkdir]: Permission denied in ... 如何解决这个问题?

我知道这是一个古老的线程,但它需要一个更好的答案。 您不需要将权限设置为777,这是一个安全问题,因为它提供对世界的读写权限。 这可能是你的apache用户对目录没有读/写权限。

这是你在Ubuntu做的

  1. 确保所有文件都属于Apache组和用户。 在Ubuntu中,它是www数据组和用户

    chown -R www-data:www-data /path/to/webserver/www

  2. 接下来启用www-data组的所有成员读取和写入文件

    chmod -R g+rw /path/to/webserver/www

php mkdir()函数现在应该工作而不返回错误

对于通过谷歌未来发现这个问题的人来说,迟到的答案。 我遇到了同样的问题。

注:我在MAC OSX狮子

会发生什么是Apache正在作为用户“_www”运行,并没有权限编辑任何文件。 你会注意到没有文件系统function通过PHP工作。

怎么修:

打开查找器窗口,从菜单栏中select“Go> Go To Folder”/ private / etc / apache2

现在打开httpd.conf

找:

 User _www Group _www 

更改用户名:

 User <YOUR LOGIN USERNAME> 

现在运行这个表单terminal重新启动apache:

 sudo apachectl -k restart 

如果它仍然不起作用,我在做以上之前恰好做了以下事情。 可能是相关的。

打开terminal并运行以下命令:(注意,我的web服务器文件位于/ Library / WebServer / www。根据您的网站位置进行更改)

 sudo chmod 775 /Library/WebServer/www sudo chmod 775 /Library/WebServer/www/* 

修复您尝试在其中创build目录的目录的权限。

在PHP中使用mkdir时,不要将权限设置为777

链接只有答案不被认为是StackOverflow的良好做法,但在这里给出的build议通常不应该跟进。

我想就类似的问题回复这个很好的答案 。 我引用:

请停止build议使用777.你正在让你的文件被所有人写入,这几乎意味着你失去了权限系统所devise的所有安全性。 如果您提出这个build议,请考虑一下它可能对configuration不当的networking服务器造成的后果:通过覆盖文件来“破解”网站会变得非常容易。 所以,不要。

您需要具有文件系统权限才能创build目录。

例如:在Ubuntu 10.04中,apache(php)以用户身份运行:www-data:www-data

这意味着用户需要访问www-data来创build目录。

您可以使用以下命令自行尝试:“su www-data”成为www-data用户。

作为一个快速修复,你可以这样做:sudo chmod 777 my_parent_dir

你可以做的另一件事是去/ etc / sudoers

有添加下面的行,该用户的权限www-data ALL =(ALL:ALL)ALL为什么www-data? 这是因为apache是​​通过这个用户名运行的。

如果您的用户不同,请尝试用户名ALL =(ALL:ALL)ALL

这对我有效。

我知道这个线程是旧的,但也许这有助于某个人。

问题为什么PHP说mkdir()的权限被拒绝 – 错误的urlpath。 所以,要解决它,所有你需要的是获得正确的path。 我这样做了:

 <?php $root = filter_input(INPUT_SERVER, 'DOCUMENT_ROOT'); $dir = $root . '/somefolder/'; $old = umask(0); if( !is_dir($dir) ) { mkdir($dir, 0755, true); } umask($old); ?> 

我刚刚有这个问题,我现在可以给你的最好的解决scheme(尽pipe你没有包括你的任何代码)是:

  1. 检查如何命名目标文件夹,例如:new_folder(有时这会导致权限错误,因为大多数主机不允许在运行时使用下划线,短划线等来创build名称)。 它为我工作。
  2. 如果使用recursion命令创build子文件夹,请不要忘记将0777添加到mkdir命令中,例如:

     if(!file_exists($output)){ if (!mkdir($output, 0755, true)) {//0755 die('Failed to create folders...'); } } 

这也适用于我。

既然你是在Mac上,你可以把自己添加到你的mac上的_www(apache用户组)组:

 sudo dseditgroup -o edit -a $USER -t user _www 

并添加_www用户的轮组似乎是什么创build文件的文件为:

 sudo dseditgroup -o edit -a _www -t user wheel