php实现文件遍历
使用 scandir() 函数遍历目录
scandir() 函数返回指定目录中的文件和目录列表,包括 . 和 ..。可以通过循环遍历结果并过滤掉这些特殊条目。
$dir = '/path/to/directory';
$files = scandir($dir);
foreach ($files as $file) {
if ($file !== '.' && $file !== '..') {
echo $file . "\n";
}
}
使用 glob() 函数匹配文件模式
glob() 函数根据指定的模式匹配文件或目录,支持通配符(如 * 和 ?)。
$files = glob('/path/to/directory/*');
foreach ($files as $file) {
echo basename($file) . "\n";
}
使用 RecursiveDirectoryIterator 递归遍历
如果需要递归遍历子目录,可以使用 RecursiveDirectoryIterator 结合 RecursiveIteratorIterator。
$dir = new RecursiveDirectoryIterator('/path/to/directory');
$iterator = new RecursiveIteratorIterator($dir);
foreach ($iterator as $file) {
if ($file->isFile()) {
echo $file->getPathname() . "\n";
}
}
过滤特定类型的文件
在遍历过程中,可以通过文件扩展名或其他属性过滤文件。例如,仅列出 .php 文件。
$files = glob('/path/to/directory/*.php');
foreach ($files as $file) {
echo basename($file) . "\n";
}
使用 opendir() 和 readdir() 手动遍历
opendir() 和 readdir() 是更底层的函数,适合需要精细控制的情况。
$dir = opendir('/path/to/directory');
while (($file = readdir($dir)) !== false) {
if ($file !== '.' && $file !== '..') {
echo $file . "\n";
}
}
closedir($dir);
排除隐藏文件
在遍历时可以通过文件名前缀排除隐藏文件(如 .gitignore)。
$files = scandir('/path/to/directory');
foreach ($files as $file) {
if ($file[0] !== '.') {
echo $file . "\n";
}
}
按修改时间排序文件
使用 array_multisort 结合 filemtime() 可以按文件修改时间排序。
$files = glob('/path/to/directory/*');
$timestamps = array_map('filemtime', $files);
array_multisort($timestamps, SORT_DESC, $files);
foreach ($files as $file) {
echo basename($file) . "\n";
}
处理符号链接
如果目录中包含符号链接,可以通过 is_link() 检查并处理。
$files = scandir('/path/to/directory');
foreach ($files as $file) {
$path = '/path/to/directory/' . $file;
if (is_link($path)) {
echo "Symbolic link: " . $file . "\n";
} elseif (is_file($path)) {
echo "File: " . $file . "\n";
}
}






