目录

PHP 遍历目录下的文件

主要归功于递归 - Recursion,又译为递回,在数学与计算机科学中,是指在函数的定义中使用函数自身的方法。递归一词还较常用于描述以自相似方法重复事物的过程。例如,当两面镜子相互之间近似平行时,镜中嵌套的图像是以无限递归的形式出现的。也可以理解为自我复制的过程。

使用 dir 函数

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?php

/**
 * 遍历指定文件夹下的文件。
 *
 * @param string $directory
 *
 * @return array
 */
function dir_list($directory)
{
    static $array = [];

    $dir = dir($directory);
    while ($file = $dir->read()) {
        if (is_dir("$directory/$file") && $file !== '.' && $file !== '..') {
            dir_list("$directory/$file");
        } else {
            if ($file !== '.' && $file !== '..') {
                $array[] = $file;
            }
        }
    }

    return $array;
}

使用 readdir 函数

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<?php

/**
 * 遍历指定文件夹下的文件。
 *
 * @param string $directory
 *
 * @return array
 */
function dir_list(string $directory): array
{
    static $array = [];

    if ($dir = opendir($directory)) {
        while (false !== $file = readdir($dir)) {
            if (is_dir("$directory/$file") && $file !== '.' && $file !== '..') {
                dir_list("$directory/$file");
            } else {
                if ($file !== '.' && $file !== '..') {
                    $array[] = $file;
                }
            }
        }
        closedir($dir);
    }

    return $array;
}

使用 scandir 函数

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?php

/**
 * 遍历指定文件夹下的文件。
 *
 * @param string $directory
 *
 * @return array
 */
function dir_list(string $directory): array
{
    static $array = [];

    $dir = scandir($directory);
    foreach ($dir as $file) {
        if (is_dir("$directory/$file") && $file !== '.' && $file !== '..') {
            dir_list("$directory/$file");
        } else {
            if ($file !== '.' && $file !== '..') {
                $array[] = $file;
            }
        }
    }

    return $array;
}

使用 RecursiveIteratorIterator 类

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
<?php

function dir_list(string $directory): array
{
    static $array = [];

    $iterator = new \RecursiveIteratorIterator(
        new \RecursiveDirectoryIterator($directory, \RecursiveDirectoryIterator::SKIP_DOTS),
        \RecursiveIteratorIterator::LEAVES_ONLY
    );
    foreach ($iterator as $object) {
        $array[] = $object->getFileName();
    }

    return $array;
}

函数调用:

1
2
3
<?php

print_r(dir_list(dirname($_SERVER['PHP_SELF'])));

输出结果:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
Array
(
    [0] => myshell.sh
    [1] => meeting.md
    [2] => untitled.html
    [3] => server.php
    [4] => .DS_Store
    [5] => index.php
    [6] => desc.md
    .
    .
    .
)