我正在尝试使用PHP mkdir函数创建目录,但出现如下错误:Warning: mkdir() [function.mkdir]: Permission denied in ...
。如何解决问题?
我正在尝试使用PHP mkdir函数创建目录,但出现如下错误:Warning: mkdir() [function.mkdir]: Permission denied in ...
。如何解决问题?
Answers:
我知道这是一个旧线程,但是需要一个更好的答案。您不需要将权限设置为777,这是一个安全问题,因为它提供了对世界的读写访问权限。可能是您的apache用户对该目录没有读/写权限。
这是您在Ubuntu中所做的
确保所有文件均归Apache组和用户所有。在Ubuntu中,它是www-data组和用户
chown -R www-data:www-data /path/to/webserver/www
接下来,使www-data组的所有成员能够读写文件
chmod -R g+rw /path/to/webserver/www
php mkdir()
函数现在应该可以正常工作而不会返回错误
/opt/lampp/htdocs/www/my-app/public/uploads
..基本上,我要尝试的是每个登录用户在uploads文件夹中上传文件,并创建相册文件夹(将使用php来完成)以存储照片..
以后通过Google找到此邮件的人的最新答案。我遇到了同样的问题。
注意:我在MAC OSX LION上
发生的是,apache以“ _www”用户身份运行,并且没有编辑任何文件的权限。您会注意到没有文件系统功能通过php起作用。
怎么修:
打开查找程序窗口,然后从菜单栏中选择“转到”>“转到文件夹”> / private / etc / apache2
现在打开httpd.conf
找:
User _www
Group _www
更改用户名:
User <YOUR LOGIN USERNAME>
现在,通过运行以下表单终端重新启动Apache:
sudo apachectl -k restart
如果仍然无法使用,我在执行上述操作之前碰巧要执行以下操作。可能相关。
打开终端并运行以下命令:(请注意,我的Web服务器文件位于/ Library / WebServer / www。根据您的网站位置进行更改)
sudo chmod 775 /Library/WebServer/www
sudo chmod 775 /Library/WebServer/www/*
_www
并为您和Apache创建一个组。成立一个新小组,例如,称为trusted
,然后将自己_www
放入其中。然后,将服务器文档目录中所有文件的组所有者设为可信任。最后,chmod g+rwx
仅对Apache需要访问的文件执行必要的操作,以便该trusted
组有权编辑文件。
修复目录的权限,您尝试创建一个目录在。
我知道这个线程很旧,但是也许有一天会帮助某个人。
PHP为什么对mkdir()说“权限被拒绝”的问题-错误的URL路径。因此,要修复它,您所需要的只是获取正确的路径。我这样做是这样的:
<?php
$root = $_SERVER["DOCUMENT_ROOT"];
$dir = $root . '/somefolder/';
if( !file_exists($dir) ) {
mkdir($dir, 0755, true);
}
?>
您需要具有文件系统权限才能创建目录。
示例:在Ubuntu 10.04中,apache(php)以用户:www-data在组:www-data中运行
意味着用户www-data需要访问权限才能创建目录。
您可以使用以下方法自己尝试:'su www-data'成为www-data用户。
作为快速修复,您可以执行以下操作:sudo chmod 777 my_parent_dir
chmod 0777
将为世界提供读写访问权限!您不应该建议这样的事情。但是,与用户组的建议是目前最好的方法:)
您可以做的另一件事是转到:/ etc / sudoers
在那里添加以下行,该行授予该用户www-data的权限ALL =(ALL:ALL)ALL为什么使用www-data?这是因为apache正在使用该用户名运行。
如果您的用户不同,请尝试使用用户名ALL =(ALL:ALL)ALL
这对我有用。
sudoers
直接编辑,而是以root用户身份登录,然后使用te visudo
命令:检查所有更改以避免错误的编辑,该错误可能会在加载sudoers文件时导致解析错误,这可能使您无能为力(如无权使用更改任何内容)
我现在遇到了这个问题,我现在可以给您的最好的解决方案是(尽管您没有包含任何代码):
如果您使用递归命令创建子文件夹,请不要忘记将0755(记住在开始时包括0)放在mkdir命令中,例如:
if(!file_exists($output)){
if (!mkdir($output, 0755, true)) {//0755
die('Failed to create folders...');
}
}
刚才这对我也有用。
如果您使用的是LINUX,首先让我们检查apache的用户,因为在某些发行版中它可能有所不同:
egrep -i '^user|^group' /etc/httpd/conf/httpd.conf
假设结果是“ http”。进行以下操作,只记得将path_to_folder更改为文件夹路径:
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);
}
}
}
}
与ftp服务器一起安装后,sudo apt-get install vsftpd
必须对其进行配置。要启用写访问权限,您必须编辑/etc/vsftpd.conf
文件并取消注释
#write_enable=YES
行,因此应阅读
write_enable=YES
保存文件并重新启动vsftpd
与sudo service vsftpd restart
。
有关其他配置选项,请参阅本文档或man vsftpd.conf
如果使用错误的路径,则会发生此错误。
例如:
我正在使用ubuntu系统,我的项目文件夹名为“ myproject”
假设我有myproject / public / report目录,并且想创建一个名为orders的新文件夹
然后,我需要一个完整的路径来存放我的项目。您可以通过PWD命令获取路径
所以我的根路径将是='/ home / htdocs / myproject /'
$ dir ='/ home / htdocs / myproject / public / report / Orders';
if (!is_dir($dir)) {
mkdir($dir, 0775, true);
}
它将为您工作!请享用 !!