This commit is contained in:
2025-04-18 01:20:11 +08:00
commit 03e2d4f092
15 changed files with 4824 additions and 0 deletions

93
clean_old_reports.php Normal file
View File

@@ -0,0 +1,93 @@
<?php
/**
* 清理旧报告文件脚本
*
* 此脚本用于自动清理过期的报告文件,保持报告目录整洁
* 可以通过群晖的计划任务定期执行
*/
// 设置错误报告
ini_set('display_errors', 1);
error_reporting(E_ALL);
// 配置信息
$config = [
// 保留最近的报告数量
'keep_recent' => 30,
// 报告目录
'reports_dir' => __DIR__ . '/reports/',
// 日志文件
'log_file' => __DIR__ . '/logs/clean_reports.log',
];
// 记录日志
function log_message($message) {
global $config;
// 确保日志目录存在
$log_dir = dirname($config['log_file']);
if (!is_dir($log_dir)) {
mkdir($log_dir, 0755, true);
}
$date = date('Y-m-d H:i:s');
$log_entry = "[$date] $message\n";
// 写入日志文件
file_put_contents($config['log_file'], $log_entry, FILE_APPEND);
// 如果是CLI模式也输出到控制台
if (php_sapi_name() === 'cli') {
echo $log_entry;
}
}
// 主程序
try {
log_message('===== 开始执行报告清理脚本 =====');
// 检查报告目录是否存在
if (!is_dir($config['reports_dir'])) {
throw new Exception("报告目录不存在: {$config['reports_dir']}");
}
// 获取所有报告文件
$reports = glob($config['reports_dir'] . 'report_*.html');
if (empty($reports)) {
log_message('没有找到需要清理的报告文件');
exit;
}
log_message('找到 ' . count($reports) . ' 个报告文件');
// 按修改时间排序(最新的在前)
usort($reports, function($a, $b) {
return filemtime($b) - filemtime($a);
});
// 保留最近的N个报告
$reports_to_keep = array_slice($reports, 0, $config['keep_recent']);
$reports_to_delete = array_slice($reports, $config['keep_recent']);
log_message('将保留最近的 ' . count($reports_to_keep) . ' 个报告');
log_message('将删除 ' . count($reports_to_delete) . ' 个旧报告');
// 删除旧报告
foreach ($reports_to_delete as $report) {
$filename = basename($report);
if (unlink($report)) {
log_message("已删除: $filename");
} else {
log_message("删除失败: $filename");
}
}
log_message('===== 报告清理完成 =====');
} catch (Exception $e) {
log_message('错误: ' . $e->getMessage());
}
?>