php递归调用函数-级联创建,级联删除,级联打印目录

  • 1,225

  递归创建目录

要求:自己写函数

完成一次创建 ./a/b/c/d/e目录 这种级联目录

//mkdir() 创建目录

//is_dir() 检测目录

//dirname() 函数返回路径中的目录部分。

function mk_dir($path){
     // 运气非常好,这个目录直接存在,返回true就可以了
    if(is_dir($path)){//判断目录已经存在
    return $path;
    }

    // 运气一般好,目录的父目录存在
    if(is_dir(dirname($path))){//检测文件后的目录名
        return mkdir($path);  //如果存在创建文件
    }


    // 运气比较差,父目录也不存在, 创建父目录
    mk_dir(dirname($path));//调用上一层目录,自身调用自身,
    return mkdir($path);   //
}
echo mk_dir('./a/f')?'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';

上面的两种递归创建级联目录,是为了练习递归

在开发中,没必要如此,

PHP5的mkdir函数,自身就能够创建级联目录

echo mkdir('./aaa/bbb/ccc/ddd/eee/fff',0777,true)?'OK':'fail';

  递归删除目录

<?php
function deldir($path) {   //检测当前目录
    
    // 不是目录,直接返回
    if(!is_dir($path)) {   //判断不是目录   return NULL
        return NULL;
    }
    
    $dh = opendir($path);    //是目录的情况下   打开$path目录   赋值给资源变量$dh
    while(($row = readdir($dh)) !== false) {     //读取目录赋值给$row
        if($row == '.' || $row == '..') {     //判断.或..  
            continue;   //逗留
        }
        // 判断是否是普通文件
        if(!is_dir($path . '/' . $row)) { //判断$path/$row不是目录  
            unlink($path . '/' . $row);   //删除文件
        } else {
            deldir($path . '/' . $row); //递归调用本身 删除文件/子文件
        }
    }

    closedir($dh);     //关闭通道
    rmdir($path);     //删除非空目录$path
    
    echo '删了',$path,'<br />';
    return true;

}

echo deldir('./a')?'OK':'fail';

 

 

weinxin
我的微信
这是我的微信扫一扫
开拓者博主
  • 本文由 发表于 2016年9月17日20:45:27
  • 转载请务必保留本文链接:https://www.150643.com/346.html
匿名

发表评论

匿名网友 填写信息