/** * 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; }