
本文详解如何用 php 安全、高效地列出指定目录下的全部文件(如 `.php` 文件),避免常见类型错误,并提供可直接运行的示例代码与关键注意事项。
在 PHP 中,glob() 函数是获取匹配通配符路径的文件列表最简洁、可靠的方式之一。它直接返回一个字符串数组(例如 ['download/index.php', 'download/register.php']),无需额外解析或转换——这正是问题中报错的根本原因:json_decode() 仅接受 JSON 格式的字符串,而 $search_data 已是原生 PHP 数组,强行调用会导致 TypeError。
✅ 正确做法是直接遍历 glob() 返回的数组:
<?php
$files = glob('download/*.php');
// 检查是否获取到文件,避免空数组导致无输出
if ($files === false) {
echo "目录不存在或权限不足。";
} elseif (empty($files)) {
echo "未找到匹配的 .php 文件。";
} else {
foreach ($files as $file) {
// 输出相对路径(含目录前缀)
echo htmlspecialchars($file) . '<br>';
}
}
?>? 关键说明与最佳实践:
- ✅ 无需 json_decode():glob() 返回的是标准 PHP 索引数组,可直接 foreach 遍历;
- ✅ 安全输出:使用 htmlspecialchars() 防止路径中特殊字符(如 浏览器误解析为 HTML,提升安全性;
- ✅ 健壮性处理:添加 false(执行失败)和 empty()(无匹配文件)判断,让脚本更健壮;
- ⚠️ 注意路径有效性:确保 'download/' 目录存在且 PHP 进程有读取权限,否则 glob() 返回 false;
- ? 扩展用法:若需列出所有文件(不限后缀),可改用 scandir() 或 DirectoryIterator,但 glob() 对通配筛选(如 *.txt, *.log)更直观高效。
综上,正确打印目录文件的核心在于理解函数返回值类型——尊重数据原生形态,而非强行套用不匹配的处理逻辑。
立即学习“PHP免费学习笔记(深入)”;











