我想使用PHP的mkdir函数创建一个目录,但是出现了以下错误:Warning: mkdir() [function.mkdir]: Permission denied in ...
。如何解决这个问题?
我想使用PHP的mkdir函数创建一个目录,但是出现了以下错误:Warning: mkdir() [function.mkdir]: Permission denied in ...
。如何解决这个问题?
你不需要将权限设置为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()
函数应该可以正常工作,不会返回错误。
/opt/lampp/htdocs/www/my-app/public/uploads
。基本上,我想做的是让每个已登录的用户上传文件到uploads文件夹,并创建相册文件夹(这将使用php完成)以存储照片。 - ltdev/path/to/webserver/www
路径(或其子文件夹)中。在我的情况下,我将文件保存在一个与/www
文件夹不同的文件夹中(即我有public/project1/www
和public/project2/www
,我正在保存到public/assets
中)。这意味着我需要关注的文件夹的权限是public/assets
而不是public/project1/www
(或p2)。希望这能解决问题,避免麻烦。 - undefinedUser _www
Group _www
User <YOUR LOGIN USERNAME>
sudo apachectl -k restart
sudo chmod 775 /Library/WebServer/www
sudo chmod 775 /Library/WebServer/www/*
chmod g+rwx
更改,这样“trusted”组就有权限编辑这些文件。 - Chris Middleton在StackOverflow上,仅提供链接作为答案并不被视为良好实践,但是这里给出的建议通常不应该被遵循。
我想引用类似问题上的一个非常好的回答。我引用如下:
请停止建议使用777。这将使您的文件可以被任何人写入,这基本上意味着您失去了权限系统设计的所有安全性。如果您建议这样做,请考虑它可能对配置不良的Web服务器的影响:通过覆盖文件,攻击网站会变得非常容易。所以,不要这样做。
<?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
如果您正在使用递归命令创建子文件夹,请不要忘记将0755(记得在开头包含0)放入mkdir命令中,例如:
if(!file_exists($output)){
if (!mkdir($output, 0755, true)) {//0755
die('无法创建文件夹...');
}
}
这对我也刚刚起作用。
if (!is_dir($dir)) {
mkdir($dir, 0775, true);
}
它会为你工作!!享受吧!!
检查一下 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);
}
}
}
}
/etc/vsftpd.conf
文件并取消注释。安装命令为sudo apt-get install vsftpd
。#write_enable=YES
line, so it should read
write_enable=YES
sudo service vsftpd restart
重新启动vsftpd
。man vsftpd.conf
。