使用scandir()而不是readdir()遍历目录文件(夹)

在使用PHP编程遍历目录文件时,我们一般可以使用readdir()scandir()来实现,不过本文要说的是,尽量使用scandir()而不是readdir()遍历目录文件,理由是scandir()用到的代码量少很多。

 
使用scandir()而不是readdir()遍历目录文件

readdir()遍历目录文件

下面使用readdir()函数的代码可以获得某一特定目录的所有文件、文件夹,包含符号点(.)和两点(..)。

if ($handle = opendir('.')) {

    while (false !== ($entry = readdir($handle))) {

        if ($entry != "." && $entry != "..") {

            echo "$entry\n";
        }
    }

    closedir($handle);
}

上述代码可获得同级目录里的所有文件、文件夹,包含符号点(.)和两点(..)。

scandir()遍历目录文件

1、下面使用scandir()函数的代码可以获得某一特定目录的所有文件、文件夹,包含符号点(.)和两点(..)。

$path    = 'images';
$files   = scandir($path);

注意,这里返回的是一个数组$files,我们可以用print_r($files);把数组打印出来。而要读取数组里的元素,我们可以用如下代码。

for ($x = 0; $x < count($files); $x++) {
echo $files[$x]."\n";
}

2、如果想在scandir()函数获得的数组中不含符号点(.)和两点(..),那么可以用如下简洁代码。

$files2 = array_diff(scandir($path), array('.', '..'));

3、scandir()函数获得的数组元素默认排列是升序,如果想要降序排列,那么可以用如下代码。

$files   = scandir($path,1);

4、关于返回值

若成功则返回文件和目录的数组。失败则返回 FALSE。如果 directory 不是目录,则抛出 E_WARNING 级别的错误。