使用递归创建、删除和打印连级目录。以及使用迭代创建连级目录。适用于新手操作。在实际项目中并不需要这么做。仅仅是为了巩固基本知识。
使用递归创建连级目录
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('./y/x/z/w/v/u')?'OK':'fail';
使用递归删除连级目录
function deldir($path){
//不是目录,直接返回
if (!is_dir($path)) {
return false;
}
$dh = opendir($path);
while(($row = readdir($dh)) !== false) {
if ($row == '.' || $row == '..') {
continue;
}
//判断是否是普通文件
if (!is_dir($path.'/'.$row)) {
unlink($path.'/'.$row); //删除子文件
}else{
deldir($path.'/'.$row); //再次利用递归删除目录
}
}
//关闭目录
closedir($dh);
//删除目录
rmdir($path);
echo '删除'.$path.'<br />';
return true;
}
echo deldir('./a');
/**
显示结果:
删除./a/b/c/d/e/f
删除./a/b/c/d/e
删除./a/b/c/d
删除./a/b/c
删除./a/b
删除./a
1
**/
function recdir($path, $lev=1){
$dh = opendir($path);
while (($row = readdir($dh)) !== false) {
if ($row =='.' || $row == '..') {
continue;
}
echo str_repeat(' ',$lev).$row.'<br />';
//如果$row还是目录
if (is_dir($path.'/'.$row)) {
recdir($path.'/'.$row, $lev+1); //再次调用这个函数
}
}
closedir($dh);
}
recdir('./');
使用迭代创建连级目录
function mk_dir($path){
$arr = array();
while (!is_dir($path)) {
array_unshift($arr, $path);
$path = dirname($path);
}
// return $arr; //由于我没有写返回值,所以z/x/c没有显示出来
print_r($arr);
if (empty($arr)) {
return true;
}
foreach ($arr as $v) {
echo "创建".$v.'成功';
mkdir($v);
}
}
mk_dir('./a/b/c/d/e/f/g');
//print_r(mk_dir('./z/x/c'));