首页 文章

CodeIgniter - 消息:mkdir():Ubuntu上的权限被拒绝

提问于
浏览
2

我想请一些帮助 . 我在Post_model构造函数中有这个PHP脚本

$dir = FCPATH . 'uploads' . DIRECTORY_SEPARATOR . 'posts'; 
if (!is_dir($dir)) {
    mkdir($dir, 0755, true);
}

这告诉我这个错误:

Severity: Warning

Message: mkdir(): Permission denied

主要思想是项目能够创建用户,这些用户可以上传图像,或创建存储在uploads文件夹中的文件夹 - 相册 .

我一直在努力修复这个错误,并且找不到解决方案 . 我已经尝试过这个代码并在Windows上运行良好,但不适用于Linux(Ubuntu 14.04)

5 回答

  • 0

    请尝试chmod 777 -R . 在你的目录中

  • 3

    即使我有同样的问题,我尝试使用umask,它工作 . 你可以这样做,

    $old = umask(0);
    mkdir($dir, 0755, true);
    umask($old);
    
  • 0
  • 0

    我建议你手动创建'uploads'文件夹并给它777权限(不递归),然后在你的php脚本中执行以下操作:

    if(!is_dir('./uploads/posts')) //create the folder if if does not already exists { mkdir('./uploads/posts',0755,TRUE); }

    这样,每次你的脚本尝试创建一个新目录时,它都有权这样做,因为你在上传内部创建了具有777的新目录 .

  • 0

    问题可能是面具:)

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

相关问题