0

私はこの関数を 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';  
            }
        }
4

2 に答える 2

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;
  }
}
于 2012-11-20T09:59:38.640 に答える
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");
}

この関数は、通常の間違い (// もその 1 つ) を許容し、ループして、サブディレクトリ アーキテクチャがまだ存在しない場合に必要なサブディレクトリ アーキテクチャを作成します。

于 2012-11-20T08:12:25.307 に答える