scandir和glob遍历文件夹目录,以及两者效率性能测试对比

阅读1821评论0

php遍历文件夹目录常用的两个内置函数:scandirglob

先看官方说明:


其中glob方法用起来比较方便,并且支持通配符。

列举一些DEMO,如下:

1、遍历目录下所有文件

<?php
print_r(glob('./data/*.*'));
?>

2、遍历目录下指定后缀文件

<?php
print_r(glob('./data/*.html'));
?>

3、遍历目录下的子目录

<?php
print_r(glob('./data/*',GLOB_ONLYDIR));
?>


看起来是不是感觉glob比scandir好用多了,下面开始测试性能,对比一下。


测试环境说明:window系统,CPU:i5-4460,内存:8G,服务器:Apache,php版本:7.3.4

测试数据说明:data文件夹中有10个子文件夹,其中a文件夹有4909个html文件,data文件夹下所有文件数量为:39795个

附图片:


单文件夹遍历测试:

    代码程序:

        单文件夹遍历测试PHP代码

    运行结果对比:

        单文件夹遍历测试结果

可以看到,scandir和glob占用的内存都一样,耗时差别很大,4909个文件遍历相差0.329秒,目前来看scandir更好

接下来测试多文件夹遍历

多文件夹遍历测试:

    代码程序:

        

    运行结果对比:

        

data下所有的子目录一共有39795个文件夹,scandir遍历用了0.074秒,而glob却用了2.8152秒,差不多是scandir的38倍了,,,,,可怕至极!


综合上述测试来说,遍历文件还是scandir效率更好、速度更快。

glob虽然起来很方法,但真挺耗时的,如果文件数量不大,可以考虑使用glob遍历

0 位网友评论:

欢迎来评论

暂不支持评论