【问题标题】:CodeIgniter - Message: mkdir(): Permission denied on UbuntuCodeIgniter - 消息:mkdir():Ubuntu 上的权限被拒绝
【发布时间】:2015-12-27 22:53:59
【问题描述】:

我需要一些帮助。我的 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) 上却不行

【问题讨论】:

标签: php codeigniter file-permissions mkdir


【解决方案1】:

即使我遇到了同样的问题,我也尝试使用 umask,它确实有效。你可以这样做,

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      【讨论】:

      • 欢迎来到 SO。请提供完整的答案,而不仅仅是链接(链接不会永远有效)。
      【解决方案4】:

      我建议您手动创建“上传”文件夹并为其授予 777 权限(非递归),然后在您的 php 脚本中执行以下操作:

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

      这样,每次您的脚本尝试创建一个新目录时,它都将有权这样做,因为您是在具有 777 的上传文件中创建新目录。

      【讨论】:

        【解决方案5】:

        问题可能是面具:)

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-03-13
          • 2011-06-25
          • 2015-03-23
          • 1970-01-01
          • 2016-08-24
          • 2013-07-01
          相关资源
          最近更新 更多