PHP列目录文件写磁盘失败及JS XHR data未定义报错排查
问题修复方案
当前代码存在两个独立问题,分别对应前端报错和后端文件生成失败,修复方式如下:
1. 前端Uncaught ReferenceError: data is not defined报错修复
报错原因
xhr.send(data)执行时,当前函数作用域内从未声明、赋值过data变量,直接触发引用错误。
该接口逻辑是触发后端扫描目录生成文件,不需要传递额外请求参数,直接传空值即可。
修复后前端代码
function LISTevents () { var xhr = new XMLHttpRequest(); xhr.open("POST", "json-events.php"); xhr.responseType = "text"; xhr.onload = function () { console.log('请求返回:', this.response); }; // 无请求参数时传null即可,不需要引用未定义的data xhr.send(null); return false; }
2. 后端无法生成archives/events.txt文件修复
故障原因
- 相对路径匹配错误:代码里写的
archives是相对路径,PHP执行时的工作目录如果不是当前php文件所在目录,会出现找不到目录、写入路径错位的问题 - 目录权限不足:web服务运行账号(常见如www-data、nginx)对
archives/目录没有写入权限,无法创建/修改目标文件 - 返回结果冗余:默认
scandir返回结果包含.(当前目录)、..(上级目录)两个无意义的特殊项,直接写入会产生无效内容
修复后后端代码
<?php // 用__DIR__固定取当前php文件所在目录,拼接绝对路径避免路径匹配错误 $archivesDir = __DIR__ . '/archives/'; $targetFile = $archivesDir . 'events.txt'; // 先判断目录是否存在、是否可读 if (!is_dir($archivesDir) || !is_readable($archivesDir)) { exit("错误:archives目录不存在或不可读"); } // 扫描目录,过滤掉.和..两个特殊目录项 $files = array_values(array_filter(scandir($archivesDir), function($item) { return !in_array($item, ['.', '..']); })); // 写入文件,判断写入结果 $writeResult = file_put_contents($targetFile, print_r($files, true)); if ($writeResult === false) { exit("错误:写入events.txt失败,请检查archives目录的写入权限"); } echo "执行成功,共扫描到".count($files)."个文件,已写入events.txt"; ?>
额外验证点
部署代码后先给archives/目录设置正确权限,Linux环境下可执行chmod 755 archives/ && chown www-data:www-data archives/(根据自身web运行用户调整属主),再触发接口即可正常生成文件。
内容的提问来源于stack exchange,提问作者verlager
相关产品推荐
相关产品推荐

