php中遍历目录可用scandir()、opendir()+readdir()、glob()或recursivedirectoryiterator;需置于标签内,通过web服务器运行,注意路径规范、权限及xss防护。

用 scandir() 快速列出目录下所有文件和子目录
这是最简单的方式,适合一次性获取全部条目:
<?php $dir = './uploads'; // 指定要遍历的目录路径(相对或绝对)
$files = scandir($dir); // 返回包含 '.' 和 '..' 的数组
foreach ($files as $file) {
if ($file === '.' || $file === '..') continue; // 跳过当前/上级目录
echo htmlspecialchars($file) . "<br>";
}
?>
用 opendir() + readdir() 更灵活地逐个读取
适合边读边处理(比如过滤、统计),内存更友好:
<?php $dir = './images';
if ($handle = opendir($dir)) {
while (false !== ($entry = readdir($handle))) {
if (in_array($entry, ['.', '..'])) continue;
echo "文件/目录:", htmlspecialchars($entry), "<br>";
}
closedir($handle);
}
?>
只遍历普通文件(排除子目录)
用 `is_file()` 判断是否为文件,避免混入文件夹:
- 确保路径正确且 PHP 有读取权限(常见问题!)
- 推荐用 `realpath()` 规范路径,防止相对路径出错
- 用 `htmlspecialchars()` 输出时防 XSS(尤其显示用户上传目录时)
<?php $dir = realpath('./documents');
if ($dir && is_dir($dir)) {
$files = array_filter(scandir($dir), function($f) use ($dir) {
return is_file($dir . '/' . $f);
});
foreach ($files as $file) {
echo "? ", htmlspecialchars($file), "<br>";
}
}
?>
递归遍历子目录(含多层)
用 SPL 的 `RecursiveDirectoryIterator` 最简洁可靠:
<?php $iterator = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator('./project', FilesystemIterator::SKIP_DOTS)
);
foreach ($iterator as $file) {
if ($file->isFile()) {
echo "? ", htmlspecialchars($file->getPath()), "/<strong>", htmlspecialchars($file->getFilename()), "</strong><br>";
}
}
?>
注意:所有这些代码都必须放在 `` 标签里,保存为 `.php` 文件(如 `list.php`),通过 Web 服务器(如 Apache/Nginx + PHP)运行,**不能直接双击打开或用 file:// 协议运行**——否则 PHP 不会解析。
不复杂但容易忽略。php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











