
本文详解如何使用 php 的 `glob()` 函数安全、高效地遍历并输出目录中匹配的文件名,避免常见类型错误(如误对数组调用 `json_decode`),并提供健壮的实践示例与注意事项。
在 PHP 中,若需列出某个目录下符合条件的文件(例如所有 .php 文件),最简洁可靠的方式是结合 glob() 函数与 foreach 循环——无需 JSON 解码、无需额外类型转换。glob() 本身即返回一个字符串数组,直接遍历即可。
以下是最推荐的标准写法:
';
}
}
?>✅ 关键说明:
- glob('download/*.php') 返回的是已解析完成的文件路径字符串数组(如 ['download/index.php', 'download/register.php']),不是 JSON 字符串,因此绝对不可传给 json_decode() ——这正是原问题中报错 Argument #1 must be of type string, array given 的根本原因。
- 使用 basename($file) 可提取纯文件名(如 index.php),增强可读性;配合 htmlspecialchars() 可防止 XSS(尤其当文件名含特殊 HTML 字符时)。
- 建议添加 if ($files === false) 检查,因为 glob() 在路径无效或权限不足时会返回 false,而非空数组,避免后续循环出错。
⚠️ 其他实用变体:
立即学习“PHP免费学习笔记(深入)”;
- 列出所有文件(不限扩展名):glob('download/*')(注意:不包含子目录中的隐藏文件和以 . 开头的文件)
- 递归列出所有子目录下的 PHP 文件:需改用 RecursiveIteratorIterator + RegexIterator,glob() 不支持递归通配(** 在部分系统需启用 GLOB_BRACE 且非跨平台)
- 排除目录、仅保留文件:可在循环中加 is_file($file) 判断,确保安全性
? 总结:
glob() 是轻量级目录文件枚举的首选函数,语义清晰、性能良好。牢记其返回值类型为 array|string[],切勿误作 JSON 处理;结合基础错误检查与输出转义,即可构建稳定、安全的文件列表功能。











