
本文介绍如何使用php自动识别并读取指定目录中最后修改的txt文件内容,并将其存储为字符串变量供后续使用。核心步骤包括扫描目录、筛选txt文件、比较修改时间、读取文件内容。
本文介绍如何使用php自动识别并读取指定目录中最后修改的txt文件内容,并将其存储为字符串变量供后续使用。核心步骤包括扫描目录、筛选txt文件、比较修改时间、读取文件内容。
要获取目录中最后修改的 .txt 文件的内容,不能仅依赖 scandir() 的字典序排序(它按文件名而非时间排序),而应结合 filemtime() 获取实际修改时间,并筛选出最新文件。以下是完整、健壮的实现方案:
<?php $directory = './downloads'; // 替换为你的实际路径
// 1. 获取目录下所有文件(排除 . 和 ..)
$files = array_diff(scandir($directory), ['.', '..']);
// 2. 筛选 .txt 文件,并收集其完整路径与修改时间
$txtFiles = [];
foreach ($files as $file) {
$filePath = $directory . '/' . $file;
if (is_file($filePath) && strtolower(pathinfo($file, PATHINFO_EXTENSION)) === 'txt') {
$mtime = @filemtime($filePath); // 使用 @ 避免警告(如权限不足)
if ($mtime !== false) {
$txtFiles[] = [
'path' => $filePath,
'mtime' => $mtime,
'name' => $file
];
}
}
}
// 3. 按修改时间降序排序(最新在前)
usort($txtFiles, function($a, $b) {
return $b['mtime'] - $a['mtime'];
});
// 4. 读取最新文件内容(若存在)
$content = '';
if (!empty($txtFiles)) {
$latestFile = $txtFiles[0]['path'];
$content = file_get_contents($latestFile);
echo "已加载最新TXT文件:{$txtFiles[0]['name']}(修改于 " . date('Y-m-d H:i:s', $txtFiles[0]['mtime']) . ")\n";
} else {
echo "警告:目录中未找到有效的 .txt 文件。\n";
}
// ✅ 此时 $content 即为所需文本内容,可直接用于输出、写入、API响应等
// 例如:echo $content; 或 file_put_contents('./output.txt', $content);
?>
✅ 关键注意事项:
-
scandir($dir, 1)是按文件名逆序排列,不等于按修改时间排序,切勿误用; - 务必使用
is_file()和扩展名校验,避免目录或非TXT文件干扰; -
filemtime()在文件不可读或权限不足时返回false,建议用@抑制警告并做显式判断; - 若需严格保证编码一致性(如UTF-8),可在读取后使用
mb_convert_encoding()处理; - 生产环境建议添加异常处理(如
try/catch包裹file_get_contents)并记录日志。
该方法简洁可靠,适用于日志归档、报告生成、动态配置加载等典型场景。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











