PHP封装清除目录下的所有文件函数

白昼怎懂夜的黑 提交于 2020-02-08 09:44:25

由于经常会遇到定期清除日志或者定期清除过期文件的需求,网上查阅了部分资料,借鉴了一位大佬的思想方法,有了如下感悟

1.PHP清除目录下的所有文件(测试使用版)

function deldir($path)
{
    echo $path;echo PHP_EOL;
    //如果是目录则继续
    if (is_dir($path)) {
        //扫描一个文件夹内的所有文件夹和文件并返回数组
        $p = scandir($path);
        foreach ($p as $val) {
            //排除目录中的.和..
            if ($val != "." && $val != "..") {
                //如果是目录则递归子目录,继续操作
                //is_dir() 函数检查指定的文件是否是一个目录
                if (is_dir($path .'/'.$val)) {
                    //子目录中操作删除文件夹和文件
                    $this->deldir($path .'/'.$val. '/');
                    //目录清空后删除空文件夹
                    @rmdir($path .'/'.$val);
                    print_r('删除空目录'.$path .'/'.$val);echo PHP_EOL;
                } else {
                    //如果是文件直接删除
                    unlink($path . $val);
                    print_r('删除文件'.$path . $val);echo PHP_EOL;
                }
            }
        }
    }else{
        print_r($path.'不是目录');
    }
}

2.参数传递:/test,删除test文件下的所有文件,结果打印如下:

在这里插入图片描述

3.PHP清除目录下的所有文件(实际使用版)

function deldir($path)
{
    //如果是目录则继续
    if (is_dir($path)) {
        //扫描一个文件夹内的所有文件夹和文件并返回数组
        $p = scandir($path);
        foreach ($p as $val) {
            //排除目录中的.和..
            if ($val != "." && $val != "..") {
                //如果是目录则递归子目录,继续操作
                if (is_dir($path .'/'.$val)) {
                    //子目录中操作删除文件夹和文件
                    $this->deldir($path .'/'.$val. '/');
                    //目录清空后删除空文件夹
                    @rmdir($path .'/'.$val);
                } else {
                    //如果是文件直接删除
                    unlink($path . $val);
                }
            }
        }
    }
}

4.补充说明:scandir函数

<?php
$dir = "/images/";
// 以升序排序 - 默认
$a = scandir($dir);
// 以降序排序
$b = scandir($dir,1);

print_r($a);
print_r($b);
?>

输出结果:

Array
(
[0] => .
[1] => ..
[2] => cat.gif
[3] => dog.gif
[4] => horse.gif
[5] => myimages
)
Array
(
[0] => myimages
[1] => horse.gif
[2] => dog.gif
[3] => cat.gif
[4] => ..
[5] => .
)

5.补充说明:函数前面加@,可以屏蔽掉当前函数运行产生的错误

举例如下:
假设要删除当前目录下的test.jpg文件
@unlink(‘test.jpg’);

unlink前不带@的运行结果: 当前目录不存在test.jpg这个文件,就会导致如下错误:
在这里插入图片描述
如果带上@(示例中的语句):
结果就不会提示错误了,可以防止一些非必要的错误导致程序的终止。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!