首页 > 编程语言 >PHP列出目录文件并保存为JSON

PHP列出目录文件并保存为JSON

来源:互联网 2026-07-01 08:26:00

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

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

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

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

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

长期稳定更新的攒劲资源: >>>点此立即查看<<<

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

很多新手在 JavaScript 里犯的毛病是 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 saved 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 数组。前端直接拿来消费,完全没有障碍。这样一来,“文件未创建”和“格式不可用”这两个烦人的痛点,就算彻底解决了。

侠游戏发布此文仅为了传递信息,不代表侠游戏网站认同其观点或证实其描述

热游推荐

更多
湘ICP备14008430号-1 湘公网安备 43070302000280号
All Rights Reserved
本站为非盈利网站,不接受任何广告。本站所有软件,都由网友
上传,如有侵犯你的版权,请发邮件给xiayx666@163.com
抵制不良色情、反动、暴力游戏。注意自我保护,谨防受骗上当。
适度游戏益脑,沉迷游戏伤身。合理安排时间,享受健康生活。