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

    linux删除文件夹 php递归创建和删除文件夹的代码小结

    2016-07-29 08:48:24原创673
    第一种方法:

    复制代码 代码如下:


    /**
    * 目录生成类 :UtilsMakeDir
    * @author yepeng
    * @since 2010.3.18
    */
    class UtilsMakeDir{
    //基目录 建立目录时不会对这个目录进行建立。这应该是个已经存在的目录
    private static $makeBasePath = 'video';
    private static $delBasePath = 'video';
    /**
    * 递归建立目录,
    * 建立成功返回这个全路径,
    * 建立失败返回false
    * @param String $pathString 路径字符串如'2/3/4/5'
    * @return false or string
    public static function makeDir($pathString){
    $pathArray = explode('//m.sbmmt.com/m/',$pathString);
    if(empty($pathArray[0])){
    return false;
    }
    $path = array_shift($pathArray);
    self::$basePath = self::$basePath.'//m.sbmmt.com/m/'.$path;
    if(is_dir(self::$basePath)){
    $path = implode('//m.sbmmt.com/m/',$pathArray);
    self::makeDir($path);
    }
    else{
    @mkdir(self::$basePath,0777);
    $path = implode('//m.sbmmt.com/m/',$pathArray);
    self::makeDir($path);
    }
    if(is_dir(self::$basePath)){
    return self::$basePath;
    }
    else{
    return false;
    }
    } */
    /**
    * 建立目录,包括基目录,比如图片要放在video(video为存在的目录)下面,你传入的参数应该是video/2/3/4
    * 建立成功返回这个全路径,
    * 建立失败返回false
    * @param String $pathString 路径字符串如'video/2/3/4/5'
    * @return false or string
    **/
    public static function makeDir($pathString){
    $pathArray = explode('//m.sbmmt.com/m/',$pathString);
    $tmpPath = array_shift($pathArray);
    foreach ($pathArray as $val){
    $tmpPath .= "//m.sbmmt.com/m/".$val;
    if(is_dir($tmpPath)){
    continue;
    }
    else {
    @mkdir($tmpPath,0777);
    }
    }
    if(is_dir($tmpPath)){
    return $tmpPath;
    }
    else{
    return false;
    }
    } /**
    * 递归删除
    * 删除目录及文件
    * 如果传一个‘video/2/3/4'这样的路径将删除4下的所有目录和文件
    * @param string $stringPath
    */
    public static function delDir($stringPath){
    if(!$handle = @opendir($stringPath)){
    return false;
    }
    while (false !==($file = readdir($handle))){
    if($file !='.' && $file != '..'){
    $tmpdir = $stringPath."//m.sbmmt.com/m/".$file;
    if(is_dir($tmpdir)){
    self::delDir($tmpdir);
    rmdir($tmpdir);
    }
    if(is_file($tmpdir)){
    unlink($tmpdir);
    }
    }
    }
    closedir($handle);
    }}
    ?>


    循环+递归,在winxp下测试成功,只要php文件编码为gb2312,文件名随意,应该把文件名改为编码为gb2312,就行

    复制代码 代码如下:


    deltree('./复件 复件 复件 复件 复件 复件 复件 复件 aaa');
    function deltree($pathdir)
    {
    //echo $pathdir.'
    ';//我调试时用的
    if(is_empty_dir($pathdir))//如果是空的
    {
    rmdir($pathdir);//直接删除
    }
    else
    {//否则读这个目录,除了.和..外
    $d=dir($pathdir);
    while($a=$d->read()) //下只删除$pathdir下
    {
    if(is_file($pathdir.'//m.sbmmt.com/m/'.$a) && ($a!='.') && ($a!='..'))
    {
    unlink($pathdir.'//m.sbmmt.com/m/'.$a); //如果是文件就直接删除
    }elseif(is_dir($pathdir.'//m.sbmmt.com/m/'.$a) && ($a!='.') && ($a!='..')) //如果是目录
    {
    if(!is_empty_dir($pathdir.'//m.sbmmt.com/m/'.$a))//是否为空
    {
    deltree($pathdir.'//m.sbmmt.com/m/'.$a); //如果不是,调用自身
    }else
    {
    rmdir($pathdir.'//m.sbmmt.com/m/'.$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;
    }
    ?>


    第二种递归法 在winxp下测试成功,只要php文件编码为gb2312,文件名随意,应该把文件名改为编码为gb2312,就行,没测

    复制代码 代码如下:


    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.'//m.sbmmt.com/m/'.$file;echo '
    ';
    $file=$dir.'//m.sbmmt.com/m/'.$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;
    }
    ?>


    第三种递归法 在winxp下测试成功,是列出目录文件 很好用

    复制代码 代码如下:


    function listDir($dir)
    {
    static $break=0; if($break++==100) exit;//控制深入层数
    static $i=-0;
    if(is_dir($dir))//目录
    {
    if ($dh = opendir($dir))//打开
    {
    while (($file = readdir($dh)) !== false)
    {
    if((is_dir($dir."//m.sbmmt.com/m/".$file)) && $file!="." && $file!="..")//目录
    {
    $j=$i;while($j--) echo "-------";
    echo "目录名:".$dir."//m.sbmmt.com/m/".$file."


    ";
    $i++;
    listDir($dir."//m.sbmmt.com/m/".$file);
    $i--;
    }
    else
    {
    if($file!="." && $file!="..")
    {
    $j=$i;while($j--) echo "-------";
    $ext=trim(extend($file));
    //if($ext=='jpg')
    echo $dir.'//m.sbmmt.com/m/'.$file."
    ";
    }
    }
    }
    closedir($dh);
    }
    }
    }
    function extend($file_name)
    {
    $retval="";
    $pt=strrpos($file_name, ".");
    if ($pt) $retval=substr($file_name, $pt+1, strlen($file_name) - $pt);
    return ($retval);
    }
    //开始运行
    listDir(".");
    ?>

    以上就介绍了linux删除文件夹 php递归创建和删除文件夹的代码小结,包括了linux删除文件夹方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

    声明:本文原创发布php中文网,转载请注明出处,感谢您的尊重!如有疑问,请联系admin@php.cn处理
    专题推荐:linux删除文件夹
    上一篇:acdsee2009许可证代码 用PHP读取超大文件的实例代码 下一篇:判断力批判txt 介绍一些PHP判断变量的函数
    大前端线上培训班

    相关文章推荐

    • PHP中怎样完成Cookie的创建、读取和删除?• PHP中怎样完成Session的设置、获取和删除?• 带你分清类中的构造函数与析构函数• PHP中的命名空间定义与使用(实例详解)• PHP中clone关键字和__clone()方法的使用(实例详解)

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网