商城首页欢迎来到中国正版软件门户

您的位置: 首页 > 文章列表 > 编程开发 > 如何使用 PHP 列出目录文件并以 JSON 格式保存到磁盘

如何使用 PHP 列出目录文件并以 JSON 格式保存到磁盘

  发布于2026-06-30 阅读(0)

扫一扫,手机访问

本文详解如何在 PHP 中安全、精准地扫描指定目录(如 archives/),筛选符合命名规范的文件,并将结果以 JSON 格式写入磁盘(如 archives/events.txt),同时规避常见错误(如未定义变量、路径问题、冗余文件写入等)。

在 Web 开发中,动态获取服务器端的文件列表并持久化存储是个高频需求,比如生成事件索引、缓存文件清单。但很多人一上来就直接调 scandir() 往里写,结果不是路径解析出问题,就是文件覆盖了,又或者格式不兼容导致前端 AJAX 调用一头雾水——坑都不少。下面这套方案偏稳健型,能复用,避坑策略也一并打包了。

✅ 正确做法:服务端 PHP 处理逻辑

先强调一点:别硬编码路径,也别用那种不安全的筛选方式。有些原始代码里 scandir('archives') 连目录存不存在都不管,更别说后面用 print_r($files1, true) 生成可读的调试字符串——这玩意儿对 Ja vaScript 来说可不是标准 JSON,前端根本没法直接解析。改进后的函数,把路径验证、后缀过滤、格式标准化和防自写入都安排上了:

⚠️ 前端调用注意事项(修复 data is not defined 错误)

很多新手在 Ja vaScript 里犯的毛病是 xhr.send(data) 直接报错,因为 data 变量压根没声明。这种情况其实分两种处理:如果不需要传参,就调 xhr.send() 空括号;如果必须 POST 数据,那就得显式构造一下:

function LISTevents() {    const xhr = new XMLHttpRequest();    xhr.open("POST", "json-events.php");    xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");    xhr.onload = function() {        if (xhr.status === 200) {            console.log("File list sa ved successfully:", xhr.response);        } else {            console.error("Server error:", xhr.statusText);        }    };    xhr.onerror = () => console.error("Network error");    xhr.send(); // ✅ 无参数时不要传 data    return false;}

? 关键要点总结

  • 路径安全:始终用 realpath() 验证目录真实性,防止路径遍历攻击;
  • 输出格式:用 json_encode() 替代 print_r(),确保前端直接能 JSON.parse();
  • 防自污染:显式排除 events.txt,避免扫描结果包含自身导致无限循环或数据异常;
  • 容错处理:加上 is_readable()、file_put_contents() 的返回值判断,便于定位写入失败原因;
  • 扩展友好:函数支持自定义后缀与目录,换个场景也很灵活(比如 list_contents('uploads', '.pdf'))。

执行脚本后,archives/events.txt 会生成类似 ["20240501-log.txt","20240502-data.txt"] 的标准 JSON 数组。前端拿过去直接消费,完全没障碍。这样一来,“文件没创建”和“格式不可用”这两个烦人的痛点,就算彻底解决了。

本文转载于:https://www.php.cn/faq/2741603.html 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

热门关注