使用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 级别的错误。