/*
级联创建目录
按日期创建目录
array(
1=>array(‘安徽’,0),
2=>array(‘北京’,0),
3=>array(‘淮北’,1),
4=>array(‘慈溪县’,3),
array(‘淮北’,1)
其中 淮北是地名,1是其父地区.
利用递归,把地区的上下级关系 层次的打印出来
—无限极分类
)
*/
// 引例
echo mkdir('./a')?'OK':'fail'; //OK
echo mkdir('./b/c')?'OK':'fail'; //fail
// 说明mkdir无法建多级目录
递归创建目录
要求:自己写函数
完成一次创建 ./a/b/c/d/e 目录 这种级联目录
// =方法一= //
function mk_dir($path) {
// 若这个目录直接存在,返回true即可
if(file_exists($path) && is_dir($path)) {
return true;
}
// 若这个目录的父目录存在时
if(is_dir(dirname($path))) {
return mkdir($path);
}
// 若这个目录的父目录也不存在,创建父目录
mk_dir(dirname($path));
return mkdir($path);
}
echo mk_dir('./a/b/c/d/e')?'ok':'fail';
// =方法二= //
function mk_dir($path) {
// 如果目录已经存在,直接返回
if(is_dir($path)) {
return true;
}
// 如果目录不存在,创建
// 问题:父目录一定就存在吗?
// 答:不一定
// 因此要保证,父目录存在或者你帮我创建了父目录
return is_dir(dirname($path))||mk_dir(dirname($path))?mkdir($path):false;
}
echo mk_dir('./aa/bb/cc')?'ok':'fail';
/*
上面两种递归创建联级目录,是为了练习递归
在开发中mkdir函数,其实自身就能够创建级联目录
*/
echo mkdir('./aaa/bbb/ccc',0777,true)?'ok':'fail';
递归删除目录
function deldir($path) {
// 不是目录,直接返回
if(!is_dir($path)) {
return null;
}
$dh = opendir($path);
while(($row = readdir($dh)) !== false) {
// 绕过
if($row == '.' || $row == '..') {
continue;
}
// 判断是否是普通文件
if(!is_dir($path . '/' . $row)) {
unlink($path . '/' . $row);
} else {
deldir($path . '/' . $row); // 递归把子目录/子文件删除
}
echo $row,'<br >';
}
closedir($dh);
rmdir($path);
echo '删了',$row,'<br >';
return true;
}
echo deldir('./aaa')?'OK':'fail';