PHP mkdir:权限被拒绝的问题
我试图创build一个PHP mkdir函数的目录,但我得到一个错误,如下所示: Warning: mkdir() [function.mkdir]: Permission denied in ...
如何解决这个问题?
我知道这是一个古老的线程,但它需要一个更好的答案。 您不需要将权限设置为777,这是一个安全问题,因为它提供对世界的读写权限。 这可能是你的apache用户对目录没有读/写权限。
这是你在Ubuntu做的
-
确保所有文件都属于Apache组和用户。 在Ubuntu中,它是www数据组和用户
chown -R www-data:www-data /path/to/webserver/www
-
接下来启用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你没有包括你的任何代码)是:
- 检查如何命名目标文件夹,例如:new_folder(有时这会导致权限错误,因为大多数主机不允许在运行时使用下划线,短划线等来创build名称)。 它为我工作。
-
如果使用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