我必须创建递归目录和创建的每个文件夹中的文件。我想是这样的:PHP的递归目录创建
modules/ modules/default modules/default/test_module modules/default/test_module/a modules/default/test_module/a/test_module.php modules/default/test_module/m modules/default/test_module/m/test_module.php modules/default/test_module/c modules/default/test_module/c/test_module.php modules/root modules/root/test_module modules/root/test_module/a modules/root/test_module/a/test_module.php modules/root/test_module/m modules/root/test_module/m/test_module.php modules/root/test_module/c modules/root/test_module/c/test_module.php templates templates/default templates/default/test_module templates/default/test_module/test_module.tpl templates/root templates/root/test_module templates/root/test_module/test_module.tpl
但这个代码生成这样的:
|-- modules | |-- default | | |-- root | | | `-- test_module | | | |-- a | | | | `-- test_module.php | | | |-- c | | | | `-- test_module.php | | | `-- m | | | `-- test_module.php | | `-- test_module | | |-- a | | | `-- test_module.php | | |-- c | | | `-- test_module.php | | `-- m | | `-- test_module.php | |-- root | | |-- index | | | `-- c | | | `-- index.php | | |-- modules | | | |-- a | | | | `-- modules.php | | | |-- c | | | | `-- modules.php | | | `-- m | | | `-- modules.php | | `-- user | | |-- a | | | `-- user.php | | |-- c | | | `-- user.php | | `-- m | | `-- user.php | `-- templates | `-- root | |-- default | | `-- test_module | | `-- test_module.tpl | `-- test_module | `-- test_module.tpl
代码是:
protected function createFiles($files, $parent_directory = null)
{
echo $parent_directory."\n</br>\n";
if (!$parent_directory) {
$parent_directory = www;
}
foreach ((array)$files as $key => $value) {
if (is_array($value)) {
if (!is_dir($parent_directory . $key)) {
mkdir($parent_directory . $key,0777);
chmod($parent_directory.$key,0777);
}
$parent_directory .= $key . '/';
$this->createFiles($value, $parent_directory);
} else {
$parent_directory_=$parent_directory.$key . '/';
if(!is_dir($parent_directory_)){
mkdir($parent_directory_,0777);
chmod($parent_directory_,0777);
}
$alias = explode('.',$value);
$alias = $alias[0];
$defaultAjaxContent = <<<AJAX
<?php
class {$alias} extends ajax{
/**
* Autocreated
**/
public function initAjax(){
}
}
?>
AJAX;
$file = fopen($parent_directory_.$value, 'w+');
$write = fwrite($file, $defaultAjaxContent);
if (!$write) {
throw new AjaxCatcher("{$parent_directory_}{$value} oluşturulurken beklenmedik bir hata oluştu. Lütfen tekrar deneyiniz. ");
}
}
}
//$file = fopen($files['default_ajax']);
return 1;
}
之所以不使用递归的mkdir:
$dirs = array();
$dirs['modules']['default'][$alias]['a'] = $alias . ".php";
$dirs['modules']['default'][$alias]['m'] = $alias . '.php';
$dirs['modules']['default'][$alias]['c'] = $alias . '.php';
$dirs['modules']['root'][$alias]['a'] = $alias . '.php';
$dirs['modules']['root'][$alias]['m'] = $alias . '.php';
$dirs['modules']['root'][$alias]['c'] = $alias . '.php';
$dirs['templates']['root'][$alias] = $alias . '.tpl';
$dirs['templates']['default'][$alias] = $alias . '.tpl';
$this->createFiles($dirs);
谢谢。
你为什么不使用PHP的的mkdir()函数的递归选项? –
因为想要的目录是一个类似于问题结束的数组。 (我会加一分钟。) – delirehberi