• 技术文章 >后端开发 >php教程

    php如何使用递归删除文件实现代码总结

    伊谢尔伦伊谢尔伦2017-07-17 13:44:04原创549
    介绍几种php使用递归删除文件实现代码,希望对朋友们的php学习有所帮助。

    循环+递归

    <?php 
    deltree('./复件 复件 复件 复件 复件 复件 复件 复件 aaa'); 
    function deltree($pathdir) 
    { 
    //echo $pathdir.'<br/>';//我调试时用的 
    if(is_empty_dir($pathdir))//如果是空的 
    { 
    rmdir($pathdir);//直接删除 
    } 
    else 
    {//否则读这个目录,除了.和..外 
    $d=dir($pathdir); 
    while($a=$d->read()) //下只删除$pathdir下 
    { 
    if(is_file($pathdir.'/'.$a) && ($a!='.') && ($a!='..')) 
    { 
    unlink($pathdir.'/'.$a); //如果是文件就直接删除 
    }elseif(is_dir($pathdir.'/'.$a) && ($a!='.') && ($a!='..')) //如果是目录 
    { 
    if(!is_empty_dir($pathdir.'/'.$a))//是否为空 
    { 
    deltree($pathdir.'/'.$a); //如果不是,调用自身 
    }else 
    { 
    rmdir($pathdir.'/'.$a); //如果是空就直接删除 
    } 
    } 
    } 
    $d->close(); 
    //echo "必须先删除目录下的所有文件";//我调试时用的 
    rmdir($pathdir); 
    } 
    } 
    function is_empty_dir($pathdir) 
    { 
    //判断目录是否为空,我的方法不是很好吧?除了.和..之外有其他东西不是为空 
    $d=opendir($pathdir); 
    $i=0; 
    while($a=readdir($d)) 
    { 
    $i++; 
    } 
    closedir($d); 
    if($i>2){return false;} 
    else return true; 
    } 
    ?>

    递归法

    <?php 
    header("Content-Type:text/html; charset=gb2312"); 
    if(deleteDir('./复件 复件 复件 复件 复件 复件 复件 复件 复件 复件 复件 aaa')) 
    echo "删除成功"; 
    function deleteDir($dir) 
    { 
    if (@rmdir($dir)==false && is_dir($dir)) //删除不了,进入删除所有文件 
    { 
    if ($dp = opendir($dir)) 
    { 
    while (($file=readdir($dp)) != false) 
    { 
    if($file!='.' && $file!='..') 
    { //echo $file=$dir.'/'.$file;echo '<br/>'; 
    $file=$dir.'/'.$file; 
    if (is_dir($file)) //是真实目录 
    { 
    deleteDir($file); 
    }else { 
    unlink($file); 
    } 
    } 
    } 
    closedir($dp); 
    }else 
    { 
    return false; 
    } 
    } 
    if (is_dir($dir) && @rmdir($dir)==false) //是目录删除不了 
    return false; 
    return true; 
    } 
    ?>

    再介绍两种递归法:

    function recursiveDelete($dir)
    {
      if ($handle = @opendir($dir))
      {
      while (($file = readdir($handle)) !== false)
      {
       if (($file == ".") || ($file == ".."))
       {
        continue;
       }
       if (is_dir($dir . '/' . $file))
       {
        // call self for this directory
        recursiveDelete($dir . '/' . $file);
       }
       else
       {
        unlink($dir . '/' . $file); // remove this file
       }
      }
      @closedir($handle);
      rmdir ($dir);
      }
    }
    /*
     自定义的删除函数,可以删除文件和递归删除文件夹
    */
     function my_del($path)
    {
     if(is_dir($path))
     {
       $file_list= scandir($path);
       foreach ($file_list as $file)
       {
        if( $file!='.' && $file!='..')
        {
         my_del($path.'/'.$file);
        }
       }
       @rmdir($path);
       //这种方法不用判断文件夹是否为空,
       //因为不管开始时文件夹是否为空,到达这里的时候,都是空的 
     }
     else
     {
      @unlink($path);
      //这两个地方最好还是要用@屏蔽一下warning错误,看着闹心
     }
    }
    $path='d:/技术文档 - 副本';
    //要删除的文件夹
    //如果php文件不是ANSI,而是UTF-8模式,
    //而且要删除的文件夹中包含汉字字符的话,调用函数前需要转码
    //$path=iconv( 'utf-8', 'gb2312',$path );
    my_del($path);

    以上就是php如何使用递归删除文件实现代码总结的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:php 文件 删除
    上一篇:如何使用php代码来删除文件夹和清理缓存实例详解? 下一篇:php如何对文件进行创建、删除、复制功能的代码实现详解
    20期PHP线上班

    相关文章推荐

    • 【活动】充值PHP中文网VIP即送云服务器• PHP写入XML文件事字表数据只读一条数据,什么原因 • 【PHP】界别include(),require(),include_once(),require_once() • js 弹窗出现乱码了解决方案 • 关于appserv的有关问题 • 本人初学者刚接触php,安装安装了XAMPP后,出现了些有关问题,求大神帮帮忙
    1/1

    PHP中文网