Files
Fuxsto-V3/user/autostr_jk_ok_stop.php
2025-10-18 14:46:52 +08:00

126 lines
4.4 KiB
PHP
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
include './email.php';
include_once './cgp.php';
// 日志记录函数,带有分割和日期归档功能
function log_message($message, $level = 'INFO') {
$timestamp = date('Y-m-d H:i:s');
$formatted_message = "[$timestamp] [$level] $message" . PHP_EOL;
// 日志文件按日期分割,每次运行新建日志文件
$log_dir = './log/auto_stop/';
if (!is_dir($log_dir)) mkdir($log_dir, 0777, true);
$log_file = $log_dir . 'auto_stop_' . date('Y-m-d_H-i-s') . '.log';
$max_log_size = 10 * 1024 * 1024; // 10MB
if (file_exists($log_file) && filesize($log_file) > $max_log_size) {
$archive_dir = $log_dir . date('Y-m-d') . '/';
if (!is_dir($archive_dir)) mkdir($archive_dir, 0777, true);
rename($log_file, $archive_dir . basename($log_file));
}
file_put_contents($log_file, $formatted_message, FILE_APPEND);
echo $formatted_message;
}
// 遍历目录函数
function traverse_directory($dir, $dir_username, $dir_password) {
log_message("开始遍历目录: $dir");
$files = array_diff(scandir($dir), ['.', '..']);
foreach ($files as $file) {
$path = "$dir/$file";
if (is_dir($path)) {
log_message("进入子目录: $path");
traverse_directory($path, $dir_username, $dir_password);
} elseif (pathinfo($file, PATHINFO_EXTENSION) === 'json') {
log_message("找到JSON文件: $path");
process_json_file($path, $dir_username);
}
}
log_message("结束遍历目录: $dir");
}
// 处理每个JSON文件的函数
function process_json_file($file_path, $dir_username) {
log_message("开始处理JSON文件: $file_path");
$json_content = file_get_contents($file_path);
$data = json_decode($json_content, true);
$dqtime = $data['dqtime'] ?? null;
$mod = $data['mod'] ?? null;
$auto = $data['auto'] ?? null;
$name = $data['name'] ?? null;
$json_username = $data['username'] ?? null;
$status = $data['status'] ?? null;
log_message("提取的数据: dqtime=$dqtime, mod=$mod, auto=$auto, name=$name, json_username=$json_username, status=$status");
if ($status === '已到期') {
log_message("产品状态为'已到期',跳过进一步操作。");
$_SESSION['user'] = $dir_username;
log_wt($name, "主机名 [{$json_username}] 已在 [{$dqtime}] 到期!", "products");
unlink($file_path);
return;
}
if ($auto == 1 && $dqtime <= date('Y-m-d')) {
log_message("产品已到期或今天到期: $dqtime准备执行模块操作...");
$_SESSION['user'] = $dir_username;
log_wt($name, "主机名 [{$json_username}] 已在 [{$dqtime}] 到期!", "products");
$Main_route = "./mods/$mod/Main.php";
if (file_exists($Main_route)) {
log_message("加载模块文件: $Main_route");
include_once $Main_route;
$re = @stop_product($data);
log_message("结果: $re");
unlink($file_path);
log_message("产品操作完成: $file_path");
sendMail("{$dir_username}@qq.com", '#Fuxsto Host 到期提醒', "您所购买的 [{$name}], 主机名 [{$json_username}]<br>已在 [{$dqtime}] 到期!");
log_message("邮件已发送给: {$dir_username}@qq.com");
} else {
log_message("模块文件不存在: $Main_route", 'ERROR');
}
} else {
log_message("auto字段不为1或产品未到期跳过操作。");
}
log_message("结束处理JSON文件: $file_path");
}
// 主函数,遍历 ./me/ 目录
function main() {
log_message("程序启动,开始遍历目录 ./me/");
$base_dir = './me/';
$users = array_diff(scandir($base_dir), ['.', '..']);
foreach ($users as $user) {
$passwords_dir = "$base_dir$user";
log_message("发现用户目录: $user");
$passwords = array_diff(scandir($passwords_dir), ['.', '..']);
foreach ($passwords as $password) {
$products_dir = "$passwords_dir/$password/products";
if (is_dir($products_dir)) {
log_message("发现产品目录: $products_dir");
traverse_directory($products_dir, $user, $password);
} else {
log_message("未找到产品目录: $products_dir", 'WARNING');
}
}
}
log_message("程序运行结束。");
}
// 启动主程序
main();
?>