PHP mkdir: 权限拒绝问题

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

372794 次浏览

修复试图创建目录 进去的目录的权限。

创建目录需要具有文件系统权限。

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

这招对我很管用。

我刚才遇到了这个问题,我现在能给你的最佳解决方案(尽管你没有包含任何代码)是:

  1. 检查如何命名目标文件夹,例如: new _ file (有时这会导致权限错误,因为大多数主机不允许在运行时创建使用下划线、破折号等的名称)。这招对我很管用。
  2. 如果您使用递归命令来创建子文件夹,不要忘记将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 中要做的

  1. 确保所有文件都属于 Apache 组和用户。在 Ubuntu 中是 Www-data组和用户

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

  2. 接下来允许 www-data 组的所有成员读写文件

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

Php 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);
}


?>

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

只有链接的答案不被认为是 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文件并取消

#write_enable=YES

所以应该是

write_enable=YES

保存文件并用 sudo service vsftpd restart重新启动 vsftpd

有关其他配置选项,请参阅 这份文件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