You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.01 02:42:28