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

PHP读取指定目录下文本文件内容出现报错问题求助

问题原因

  • 你调用readdir()获取到的$book仅为文件名,不包含你指定的books/前缀路径,直接用fopen($book)会在脚本当前运行目录(也就是index.php所在的BooksEditorForm目录)找文件,自然找不到目标文件
  • readdir()会返回.(当前目录)和..(上级目录)两个特殊目录项,你没有过滤就直接尝试打开,.是目录无法用fopen读内容,所以触发权限报错
  • 第一版代码里嵌套的glob("*.txt")逻辑完全多余,glob默认是在当前脚本目录扫描txt文件,和你外层遍历的books/目录没有关联
  • 你调用closedir()时没有传入之前打开的目录句柄$books,属于语法错误

修正后的可运行代码

<?php
// 指定目标目录
$path = "books/";
// 直接扫描目标目录下的所有txt文件,自动带上路径前缀
$txtFiles = glob($path . "*.txt");

foreach ($txtFiles as $filePath) {
    // 提取纯文件名用于展示
    $fileName = basename($filePath);
    echo "<p>文件名:" . $fileName . "</p>";
    // 读取文件内容,htmlspecialchars用于避免文件内的HTML代码破坏页面结构
    $content = file_get_contents($filePath) or die("读取文件失败,请检查books目录权限");
    echo "<p>内容:<br>" . htmlspecialchars($content) . "</p><hr>";
}
?>

后续开发编辑保存功能的注意点

  • 做编辑表单时,需要把文件的标识(建议做加密处理,不要直接传原始路径)传到提交接口,保存时再写回对应路径即可
  • 必须做路径安全校验,防止恶意用户构造路径读取修改站点其他目录的文件
  • 确保books/目录对PHP运行用户有读写权限,Windows下XAMPP环境一般给目录开放Users组的读写权限即可

内容的提问来源于stack exchange,提问作者Kasia13130

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 14:09:03