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
相关产品推荐
相关产品推荐

