删除指定目录或该目录下的所有文件的函数

admin2019-12-21814

在文件操作里面删除也是其中非常重要的一个功能,若一个系统没有删除功能,试想这样的系统肯定没有法用,我们知道织梦后台删除目录并不会把有的目录里面的文件内容一并删除,而是仅仅只把栏目的数据库信息删除掉,这是因为织梦为了安全考虑。

但是并不是说织梦没有这个功能,今天介绍的这个函数RmDirFile($indir)和RmDirFiles($indir),由于二个函数功能,代码几乎完全一样,所以,只要把其中一个分析完,另一个就明白了,本教程以RmDirFile($indir)为例子介绍。

以下是二个函数的比较:

函数名:RmDirFile($indir)

所在文件:单元操作类文件www.xxx.com/inlude/typeunit.class.admin.php

功能:删除指定目录的所有文件,但该目录不删除。

函数名:RmDirFiles($indir)

所在文件:/dede/file_class.php

功能:删除除了删除指定目录的所有文件外,还把该目录也一起删除。

二个函数的区别:

1、这二个函数名字仅只差一个s。

2、功能上唯一区别是第一个函数指定的目录不删除,第二个函数包括指定目录,全部删除。

3、代码几乎一样,唯一的区别是第一个删除目录是在while循环里面,第二个是删除目录是在while循环外面,这就决定了它们功能。若删除目录函数rmdir()放在while外面,则表示包括该指定目录一起删除,否则,只删除该指定目录里面的目录和文件。

RmDirFile($indir)函数完整代码是:

function RmDirFile($indir)
    {
        if(!file_exists($indir)) return;
        $dh = dir($indir);
        while($file = $dh->read())
        {
            if($file == "." || $file == "..")
            {
                continue;
            }
            else if(is_file("$indir/$file"))
            {
                @unlink("$indir/$file");
            }
            else
            {
                $this->RmDirFile("$indir/$file");
            }
            if(is_dir("$indir/$file"))
            {
                @rmdir("$indir/$file");
            }
        }
        $dh->close();
        return(1);
    }

RmDirFile($indir)函数代码:

 function RmDirFiles($indir)
    {
        if(!is_dir($indir))
        {
            return ;
        }
        $dh = dir($indir);
        while($filename = $dh->read())
        {
            if($filename == "." || $filename == "..")
            {
                continue;
            }
            else if(is_file("$indir/$filename"))
            {
                @unlink("$indir/$filename");
            }
            else
            {
                $this->RmDirFiles("$indir/$filename");
            }
        }
        $dh->close();
        @rmdir($indir);
    }

这二个函数代码的区别上面提到了。

函数分析:

在分析函数以前,我们要先了解一下,要删除文件要做哪些操作。

首先要打到文件,如果文件都找不到,如何删除呢。

其次,找到后要先跳过符号"."和"..",因为,在我们读目录时,先读到这二个符号,这一点往往在我们编写程序时,会忽略掉,特别是新手刚编辑容易漏掉。

再次,找到的东西是不是文件,要先判断一下,如果是文件,直接删除之。若是目录我们要递归删除,关于递归的知识,我们已经详细讲解过了。请在本论坛看一下相关的教程。

最后,如果是一个目录,且为空,直接用rmdir()函数删除之。

通过上面的分析,我们知道,删除指定目录的文件,其实,就是找文件,然后,判断,然后,使用织梦定义的函数或php系统中的函数删除掉即可。

在这个函数中用到了一个不常用,但是非常好用的dir()函数,这个系统函数返回的是一个对象。

dir() 功能:函数打开一个目录句柄,并返回一个对象。这个对象包含三个方法:read() , rewind() 以及 close()。其中,read()是读文件方法,rewind()是文件位置指针设为文件流的开头,close()是一个关闭方法。

read()函数在我们删除目录或文件时,经常用得到,像本函数就是用的这个函数。通过上面的分析,其实,我们对这个函数已经非常了解了。

删除函数总结:

删除文件函数:unlink(文件名)

删除目录函数:rmdir(目录)这个函数删除时,目录必须为空,也就是目录里面没有任何内容,才可以删除目录。

删除变量:unset(变量名)


网友评论