制作年度和月度子目录错误

时间:2012-11-20 07:33:31

标签: php codeigniter function

我在codeigniter中使用此函数,只有在它们不存在时才尝试检查和创建目录和子目录。仅生成k_uploads,但在主目录'k_upoloads'中创建子目录时发生错误。结构应该是

    k_uploads (main directory)
       -2012 (subdirectory in main directory - made per year in k_uploads)
          -Jan(subdirectory in 2012 - made every month in 2012)
            -subdirx (subdirectory in Jan - holds the excel files for that month)
          xxyyy.xlsx (month files in subdirx)

应创建每年和每月的目录和子目录。我不知道问题在哪里,它适用于普通的PHP,但不适用于codeigniter。

public function makeDir(){
            $labref = $this->uri->segment(3);
            $dirName='k_uploads';
             echo  $store_dir= date('Y').'/'.date('M').'/'.$subdirx;          

             if(!is_dir($dirName))
             $k= mkdir($dirName, 0777);
            if($k){
                echo $dirName. 'dir has been created';
            }else{
                echo 'An error occured';
            }
            if(is_dir($dirName))
                $w=  mkdir($store_dir,0777);
            if($w){
                echo $sore_dir. 'subdirs have been created';
            }else{
               echo 'An error occured';  
            }
        }

2 个答案:

答案 0 :(得分:1)

mkdir有一个可以设置的递归标志。这将创建完整的路径。见PHP: mkdir

所以你应该使用mkdir($store_dir,0777, true)

该功能可能如下所示:

public function makeDir(){
  $subdirx = $this->uri->segment(3);
  $store_dir= APPPATH . 'k_uploads/' . date('Y').'/'.date('M').'/'.$subdirx;          

  if(!is_dir($store_dir)) {
    return mkdir($dirName, 0777, true);
  } else {
    return true;
  }
}

答案 1 :(得分:0)

为了做到这一点,您需要在序列中创建每个子目录,因为PHP不会为您执行此操作。您可能希望在执行此操作时使用is_dir()检查目录是否已存在。

以下是一个例子:

function createDir($dirToMake) {
   $root = "/home/sites/test/www/";
   $dArray = explode("/",$dirToMake);
   if (file_exists($root) && is_dir($root)) {
       // just a quick check
       if (substr($root,0,-1) !== "/") $root .= "/";
       foreach ($dArray as $v) {
          if (strlen($v) == 0) continue;
          $root = $root.$v."/";
          if (file_exists($root) && is_dir($root)) continue;
          mkdir($root);
       }
   }
   else throw new Exception("Root directory does not exist");
}

此函数还允许通常的错误(//作为其中之一),并且将循环执行,如果它不存在则创建所需的子目录体系结构。