我试图用 PHP mkdir 函数创建一个目录,但是我得到一个错误,如下所示: Warning: mkdir() [function.mkdir]: Permission denied in ...。如何解决这个问题?
Warning: mkdir() [function.mkdir]: Permission denied in ...
修复试图创建目录 进去的目录的权限。
创建目录需要具有文件系统权限。
Example: In Ubuntu 10.04 apache (php) runs as user: www-data in group: www-data
这意味着用户 www-data 需要访问才能创建目录。
您可以使用‘ su www-data’来成为 www-data 用户。
作为一个快速修复,您可以这样做: sudo chmod 777 my _ father _ dir
对于未来通过谷歌找到这个问题的人来说,这是一个迟到的回答。 我也遇到了同样的问题。
NOTE: I AM ON MAC OSX LION
发生的情况是,apache 作为用户“ _ www”运行,没有编辑任何文件的权限。您将注意到没有文件系统函数通过 php 工作。
解决方法:
打开一个查找器窗口,从菜单栏中选择 Go > Go To Folder >/private/etc/apache2
现在打开 httpd.conf
查找:
User _www Group _www
change the username:
User <YOUR LOGIN USERNAME>
现在通过运行这个表单终端重新启动 apache:
sudo apachectl -k restart
如果还是不起作用, 我碰巧做了以下之前,我做了上述。可能有关联。
打开终端并运行以下命令: (注意,我的网络服务器文件位于/Library/WebServer/www。根据您的网站位置更改)
sudo chmod 775 /Library/WebServer/www sudo chmod 775 /Library/WebServer/www/*
What the other thing you can do is go to: /etc/sudoers
在这里添加以下一行,该行为该用户提供权限 翻译: 奇芳校对: 奇芳校对: 奇芳校对: 奇芳校对: 奇芳校对: 奇芳校对: 奇芳校对: 奇芳校对: 奇芳校对: 奇芳校对: 奇芳校对: 奇芳校对: 奇芳校对: 奇芳校对 为什么是 www-data? 这是因为 apache 使用这个用户名运行。
如果您的用户不同,请尝试 用户名 ALL = (ALL: ALL) ALL
这招对我很管用。
我刚才遇到了这个问题,我现在能给你的最佳解决方案(尽管你没有包含任何代码)是:
如果您使用递归命令来创建子文件夹,不要忘记将0755(记住在开始时包含0)放到 mkdir 命令中,例如:
if(!file_exists($output)){ if (!mkdir($output, 0755, true)) {//0755 die('Failed to create folders...'); } }
This is also worked for me just now.
我知道这是条老线索,但它需要一个更好的答案。您不需要将权限设置为777,这是一个安全问题,因为它提供了对世界的读写访问。可能是您的 apache 用户对目录没有读/写权限。
这就是你在 Ubuntu 中要做的
确保所有文件都属于 Apache 组和用户。在 Ubuntu 中是 Www-data组和用户
sudo chown -R www-data:www-data /path/to/webserver/www
接下来允许 www-data 组的所有成员读写文件
sudo chmod -R g+rw /path/to/webserver/www
Php mkdir()函数现在应该可以正常工作,不会返回错误
mkdir()
因为你是在 Mac 上,你可以把自己加入到你的 Mac 上的 _ www (apache 用户组)组:
sudo dseditgroup -o edit -a $USER -t user _www
and add _www user to the wheel group which seems to be what the mac creates files as:
sudo dseditgroup -o edit -a _www -t user wheel
我知道这个帖子很旧了,但也许有一天它能帮到别人。
PHP 为什么对 mkdir ()说“权限拒绝”的问题-错误的 url 路径。所以,要修复它,你所需要的就是获得正确的路径。我是这样做的:
<?php $root = $_SERVER["DOCUMENT_ROOT"]; $dir = $root . '/somefolder/'; if( !file_exists($dir) ) { mkdir($dir, 0755, true); } ?>
只有链接的答案不被认为是 StackOverflow 的好做法,但是这里给出的建议一般不应该被跟进。
我想回到 这是对类似问题的一个很好的回答。我引用:
请不要再建议使用777了。你让每个人都可以写你的文件,这意味着你失去了许可系统设计的所有安全性。如果你建议这样做,想想它可能会对配置不当的网络服务器造成的后果: 通过覆盖文件,“黑客”网站会变得非常容易。所以,不要。
如果你正在使用 LINUX,首先让我们检查一下 apache 的用户,因为在一些发行版中它可能是不同的:
egrep -i '^user|^group' /etc/httpd/conf/httpd.conf
让我们假设结果是“ http”:
chown -R http:http path_to_folder chmod -R g+rw path_to_folder
检查是否是 umask 的问题
if (!function_exists('mkdir_r')) { /** * create directory recursively * @param $dirName * @param int $rights * @param string $dir_separator * @return bool */ function mkdir_r($dirName, $rights = 0744, $dir_separator = DIRECTORY_SEPARATOR) { $dirs = explode($dir_separator, $dirName); $dir = ''; $created = false; foreach ($dirs as $part) { $dir .= $part . $dir_separator; if (!is_dir($dir) && strlen($dir) > 0) { $created = mkdir($dir, $rights); } } return $created; } } if (!function_exists('ensure_dir')) { /** * ensure directory exist if not create * @param $dir_path * @param int $mode * @param bool $use_mask * @param int $mask * @return bool */ function ensure_dir($dir_path, $mode = 0744, $use_mask = true, $mask = 0002) { // set mask $old_mask = $use_mask && $mask != null ? umask($mask) : null; try { return is_dir($dir_path) || mkdir_r($dir_path, $mode); } finally { if ($use_mask && $old_mask != null) { // restore original umask($old_mask); } } } }
使用 sudo apt-get install vsftpd安装 ftp 服务器后,必须对其进行配置。若要启用写访问,必须编辑 /etc/vsftpd.conf文件并取消
sudo apt-get install vsftpd
/etc/vsftpd.conf
#write_enable=YES
所以应该是
write_enable=YES
保存文件并用 sudo service vsftpd restart重新启动 vsftpd。
sudo service vsftpd restart
vsftpd
有关其他配置选项,请参阅 这份文件或 man vsftpd.conf
man vsftpd.conf
如果使用错误的路径,将发生此错误。
例如:
我正在使用 ubuntu 系统,我的项目文件夹名称是 “我的项目”
Suppose I have 我的计划/公开/报告 directory exist and want to create a new folder called orders
然后我需要一个完整的路径,我的项目存在。你可以得到的路径由 PWD 命令
所以我的根路径是 =’/home/htdocs/myproject/’
$dir =’/home/htdocs/myproject/public/report/Orders’;
if (!is_dir($dir)) { mkdir($dir, 0775, true); }
它会为你工作! ! 享受! !
我尽我所能去解决这个问题,但是以上的答案都没有帮助。 最后,重新启动 Apache 起了作用
sudo service apache2 restart
我的系统正在运行 Ubuntu20,Samba 共享有权限问题的目录。
在 ubuntu 22.04上尝试以下操作
sudo chown -R ubuntu:ubuntu /var/www/html sudo chmod -R 755 /var/www/html