예제 #1
0
파일: FileCtl.php 프로젝트: poppen/p2
 /**
  * mkdirR() の実処理を行う
  *
  * @access  private
  * @param   integer  $rtimes  再帰呼び出しされている現在回数
  * @return  boolean
  */
 function _mkdirR($dir, $perm = null, $die = true, $rtimes = 0)
 {
     global $_conf;
     $me = __CLASS__ . "::" . __FUNCTION__ . "()";
     // 引数エラー
     if (strlen($dir) == 0) {
         trigger_error("{$me} cannot mkdir. no dirname", E_USER_WARNING);
         $die and die('Error');
     }
     // 既にディレクトリが存在している時は、そのままでOK
     if (is_dir($dir)) {
         return true;
     }
     if (empty($perm)) {
         $perm = empty($_conf['data_dir_perm']) ? 0707 : $_conf['data_dir_perm'];
     }
     $dir_limit = 50;
     // 親階層を上る制限回数
     // 再帰超過エラー
     if ($rtimes > $dir_limit) {
         trigger_error("{$me} cannot mkdir. ({$dir}) too match up dir! I'm very tired.", E_USER_WARNING);
         $die and die('Error');
         return false;
     }
     // 親から先に再帰実行
     if (!FileCtl::_mkdirR(dirname($dir), $perm, $die, ++$rtimes)) {
         $die and die('Error: FileCtl::_mkdirR()');
         return false;
     }
     if (!mkdir($dir, $perm)) {
         trigger_error("{$me} -> mkdir failed, {$dir}", E_USER_WARNING);
         $die and die('Error: mkdir()');
         return false;
     }
     chmod($dir, $perm);
     return true;
 }