<?php
/**
 * 百度SEO站群系统 - 全局配置文件
 * 所有核心参数集中管理
 */


// ========== 文件路径 ==========
define('ROOT_PATH', dirname(__FILE__) . '/');

// ========== 站点基本信息 ==========
// ========== 域名差异化配置加载 (Site Group) ==========
$domainConfigs = require_once ROOT_PATH . 'domain_config.php';
$currentDomain = strtolower($_SERVER['HTTP_HOST'] ?? 'localhost');
// 去除端口号
$currentDomain = preg_replace('/:\d+$/', '', $currentDomain);

// 百度SEO：强制向搜索引擎及云CDN宣发“按设备独立缓存”指令
// 防止 CDN 或百度中心节点将 PC 端的 301 缓存重叠给移动端，造成死循环降权。
header('Vary: User-Agent');

// 百度SEO：强制 HTTPS 及非 www 跳转到 www，汇聚权重并提升安全性
$hostParts = explode('.', $currentDomain);
$isBareDomain = false;
// 处理普通根域名 (例如 baidu.com) 以及带有 .com.cn 等的根域名
if (count($hostParts) === 2 && !filter_var($currentDomain, FILTER_VALIDATE_IP)) {
    $isBareDomain = true;
} elseif (count($hostParts) === 3) {
    $tld = $hostParts[1] . '.' . $hostParts[2];
    $commonTlds = ['com.cn', 'net.cn', 'org.cn', 'gov.cn', 'edu.cn', 'co.jp', 'co.uk', 'com.tw', 'com.hk'];
    if (in_array($tld, $commonTlds)) {
        $isBareDomain = true;
    }
}

if ($currentDomain !== 'localhost' && !filter_var($currentDomain, FILTER_VALIDATE_IP)) {
    $currentProtocol = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on') ? 'https' : 'http';
    if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') {
        $currentProtocol = 'https';
    }
    
    $needsRedirect = false;
    $targetProtocol = $currentProtocol;
    $targetHost = $_SERVER['HTTP_HOST'];
    
    // 1. 强制 HTTP 跳转 HTTPS (百度闪电/HTTPS优先收录算法)
    if ($currentProtocol === 'http') {
        $targetProtocol = 'https';
        $needsRedirect = true;
    }
    
    $isMobile = false;
    $isSpider = false;
    if (isset($_SERVER['HTTP_USER_AGENT'])) {
        $ua = strtolower($_SERVER['HTTP_USER_AGENT']);
        // 匹配常见移动端 UA 关键词
        if (preg_match('/(mobile|android|iphone|ipad|ipod|windows phone|symbian|blackberry|micromessenger|ucbrowser|opera mini)/i', $ua)) {
            $isMobile = true;
        }
        // 【闪电算法】：全局探测蜘蛛，用于阻断重型JS向蜘蛛吐出，保障首屏 <0.5秒
        if (preg_match('/(baidu|sogou|360|bing|google|spider|bot|slurp|crawler)/i', $ua)) {
            $isSpider = true;
        }
    }
    
    // 2. 终端自适应跳转 (百度移动端自适应收录算法)
    if ($isMobile) {
        // 移动端：访问根域名或 www. 时，强制跳转到 m.
        if ($isBareDomain || strpos($targetHost, 'www.') === 0) {
            $baseDomain = strpos($targetHost, 'www.') === 0 ? substr($targetHost, 4) : $targetHost;
            $targetHost = 'm.' . $baseDomain;
            $needsRedirect = true;
        }
    } else {
        // PC端：访问根域名跳转到 www.，访问 m. 时跳转回 www.
        if ($isBareDomain) {
            $targetHost = 'www.' . $targetHost;
            $needsRedirect = true;
        } elseif (strpos($targetHost, 'm.') === 0) {
            $targetHost = 'www.' . substr($targetHost, 2);
            $needsRedirect = true;
        }
    }
    
    if ($needsRedirect) {
        $newUrl = $targetProtocol . '://' . $targetHost . $_SERVER['REQUEST_URI'];
        header('HTTP/1.1 301 Moved Permanently');
        header('Location: ' . $newUrl);
        exit;
    }
}

// 【百度闪电算法/安全联盟优化】：JS跳转已移除
// PHP 301 重定向（第36-91行）已完成设备自适应跳转，JS跳转多余且有害：
// 1. 百度蜘蛛遇到JS跳转会判定为"恶意劫持"（安全联盟打击对象）
// 2. 增加首屏渲染时间，违反闪电算法要求
// 3. Cloudflare 页面规则可替代CDN穿透需求
define('JS_REDIRECT_SNIPPET', '');

// 尝试完全匹配
if (isset($domainConfigs[$currentDomain])) {
    define('DOMAIN_CONFIG', $domainConfigs[$currentDomain]);
} else {
    // 尝试通配符匹配 (如 *.se56av.com)
    $matched = false;
    foreach ($domainConfigs as $domain => $config) {
        if (strpos($domain, '*') !== false) {
            // 支持多级子域名匹配，如 a.b.example.com 匹配 *.example.com
            $pattern = '/^' . str_replace('\*', '[a-z0-9\.\-]+', preg_quote($domain, '/')) . '$/i';
            if (preg_match($pattern, $currentDomain)) {
                define('DOMAIN_CONFIG', $config);
                $matched = true;
                break;
            }
        }
    }
    // 尝试纯通配符 '*' 匹配（泛域名兜底）
    if (!$matched && isset($domainConfigs['*'])) {
        $dynamicConfig = $domainConfigs['*'];
        
        // 【飓风算法/站群连坐查杀克星】：泛解析站群动态异构裂变引擎
        // 百度极度厌恶几百个泛域名全部套用同一套排版和TDK句式（模板同质化）。
        // 在这里直接根据当前域名哈希，强行让每个泛域名“长出”完全不同的品牌名、TDK基因与主题色！
        $domainSeed = abs(crc32($currentDomain));
        
        $brands = ['影院', '视频', '影视', '在线', '频道', '坊', '阁', '大全', '网'];
        $titles = [
            '{kw} - 高清免费在线观看',
            '【{kw}】完整版在线播放',
            '{kw}极速秒播 - {site_name}',
            '无删减：{kw} - 免费资源',
            '{site_name}：为您精选 {kw}'
        ];
        $descs = [
            '为您提供{kw}等高清视频在线观看，每日更新，极速播放。',
            '想看{kw}找不到资源？来{site_name}，超清画质毫无卡顿。',
            '{site_name}独家收录{kw}，精彩看点不容错过，全网领先。',
            '{kw}全集免费放送，尽在{site_name}，告别会员弹窗。'
        ];
        $colors = ['#ff9d6b', '#e94560', '#6b9dff', '#9d6bff', '#ff6b9d', '#00b894', '#0984e3'];
        
        $dynamicConfig['site_name'] = getDomainMarker($currentDomain) . $brands[$domainSeed % count($brands)];
        $dynamicConfig['title_template'] = $titles[($domainSeed + 1) % count($titles)];
        $dynamicConfig['description_template'] = $descs[($domainSeed + 2) % count($descs)];
        $dynamicConfig['accent_color'] = $colors[($domainSeed + 3) % count($colors)];
        // 替换刚才生成的 {site_name}
        $dynamicConfig['title_template'] = str_replace('{site_name}', $dynamicConfig['site_name'], $dynamicConfig['title_template']);
        $dynamicConfig['description_template'] = str_replace('{site_name}', $dynamicConfig['site_name'], $dynamicConfig['description_template']);
        
        define('DOMAIN_CONFIG', $dynamicConfig);
        $matched = true;
    }
    if (!$matched) {
        define('DOMAIN_CONFIG', $domainConfigs['default']);
    }
}

// 从域名提取标记（支持泛域名差异化）
// 泛域名（三级及以上）: abc.619150.com → abc, xy.619150.com → xy
// 普通域名: shefj.com → shefj, 127.0.0.1 → 127
function getDomainMarker($host)
{
    $host = preg_replace('/:\d+$/', '', $host); // 去掉端口号
    $host = preg_replace('/^www\./i', '', $host); // 【核心修复】：必须剥离 www. 保留子域名，否则会被误判为泛域名导致品牌词变成 WWW
    $parts = explode('.', $host);
    if (count($parts) >= 3) {
        // 泛域名场景：取子域名前缀作为差异化标记
        // abc.619150.com → abc, a.b.619150.com → a.b
        return implode('.', array_slice($parts, 0, count($parts) - 2));
    }
    if (count($parts) >= 2) {
        return $parts[count($parts) - 2]; // 主域名去后缀
    }
    return $parts[0];
}

// 应用配置
$domainMarker = getDomainMarker($_SERVER['HTTP_HOST'] ?? 'localhost');
// 修复站点名称Bug：优先使用配置中设置的专属品牌词，未设置则用域名拼音保底
$siteName = defined('DOMAIN_CONFIG') && isset(DOMAIN_CONFIG['site_name']) && !empty(DOMAIN_CONFIG['site_name']) 
    ? DOMAIN_CONFIG['site_name'] 
    : $domainMarker;
define('SITE_NAME', $siteName);
define('SITE_DOMAIN', preg_replace('/:\d+$/', '', $_SERVER['HTTP_HOST'] ?? 'localhost')); // 动态获取当前域名
// 自动检测协议（百度优先收录HTTPS页面，提升排名权重）
$_scheme = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on') ? 'https' : 'http';
define('SITE_URL', $_scheme . '://' . ($_SERVER['HTTP_HOST'] ?? 'localhost'));

// ========== 路径相关 ==========
// 动态加载域名专属关键词库 (All domains now share 1.txt as requested)
define('KEYWORDS_FILE', ROOT_PATH . '1.txt');
define('DIR_KEYWORDS_FILE', ROOT_PATH . '2.txt');   // 泛目录关键词
define('DOMAINS_FILE', ROOT_PATH . 'ym.txt');       // 站群域名列表
define('CACHE_DIR', ROOT_PATH . 'cache/');           // 缓存目录

// ========== MySQL数据库配置 ==========
define('DB_HOST', '127.0.0.1');          // 数据库主机
define('DB_PORT', '3306');               // 端口
define('DB_NAME', 'hqsbzl.com');              // 数据库名
define('DB_USER', 'hqsbzl.com');              // 用户名
define('DB_PASS', 'JcrRMkFNJ3B4PpF4');   // 数据库密码
define('DB_CHARSET', 'utf8');            // 字符集

// ========== API接口配置 ==========
define('API_LIST_URL', 'https://www.hongniuzy2.com/api.php/provide/vod/from/hnm3u8/at/xml/');
define('API_DETAIL_URL', 'https://www.hnjiexi.com/m3u8/?url=');
define('API_XML_URL', 'https://caiji.maotaizy.cc/api.php/provide/vod/from/mtm3u8/at/josn/');
define('PLAYER_URL', 'https://maotai888.vip:966/?url=');

// ========== 缓存配置 ==========
define('CACHE_ENABLED', true);
define('CACHE_TTL', 3600);          // 默认缓存1小时（秒）
define('STATIC_CACHE', false);      // 首页静态化开关

// ========== 高级缓存配置 (Cache Optimization) ==========
// 接口与查询缓存驱动: 'file' (默认文件系统) 或 'redis'
// [合规审查]：强烈建议使用 redis，使用 file 会在海量长尾词被访问时产生数以万计的小文件，撑爆服务器Inode导致无法写入。
define('CACHE_DRIVER', 'redis');     
// 泛目录HTML页面落库方案：
// 'file' (容易导致小文件爆满/Inode耗尽)
// 'mysql' (存入pan_html_cache表，极速且不耗尽文件节点，但长期运行数据库容量会无限制增大)
// 'redis' (纯内存固化，极速，配合 maxmemory-policy 永远不会撑爆硬盘和内存)
// [合规审查]：如果您的数据库一直在无限制增大，请在此改为 redis。
define('HTML_CACHE_DRIVER', 'redis'); 

// Redis 服务器信息（仅当启用Redis时生效）
define('REDIS_HOST', '127.0.0.1');
define('REDIS_PORT', 6379);
define('REDIS_PASS', '');           // 有密码填密码，无则留空
define('REDIS_PREFIX', 'seo_v3_');

// ========== 广告位变量（统一管理，方便一键替换） ==========
$ad1 = ''; // 头部广告位
$ad2 = ''; // 播放器/列表上方广告位
$ad3 = ''; // 列表下方广告位
$ad4 = ''; // 底部广告位

// ========== SEO配置 ==========
define('BAIDU_PUSH_TOKEN', '');      // 百度推送token（填入后自动推送）
define('SITEMAP_LIMIT', 5000);       // sitemap最大URL数量（百度特供模式使用）

// ========== 递归Sitemap配置 (v3.0) ==========
define('SITEMAP_PER_FILE', 50000);       // 每个子地图最大URL数 (标准上限50000)
define('SITEMAP_INDEX_TTL', 21600);      // 主索引缓存TTL: 6小时
define('SITEMAP_SUB_TTL', 86400);        // 子地图缓存TTL: 24小时
define('SITEMAP_CACHE_DIR', CACHE_DIR . 'sitemap/');  // Sitemap专用缓存目录

// ========== 分类映射 ==========
$categories = [
    '国产一区' => ['id' => 20, 'slug' => 'guochan1'],
    '国产二区' => ['id' => 31, 'slug' => 'guochan2'],
    '黑料曝光' => ['id' => 37, 'slug' => 'heiliao'],
    '制服诱惑' => ['id' => 46, 'slug' => 'zhifu'],
    '伦理之爱' => ['id' => 55, 'slug' => 'lunli'],
    '直播' => ['id' => 64, 'slug' => 'zhibo'],
    '欧美' => ['id' => 72, 'slug' => 'oumei'],
    '动漫' => ['id' => 90, 'slug' => 'dongman'],
    '日本' => ['id' => 93, 'slug' => 'riben'],
];

// ========== 辅助函数 ==========

/**
 * 检查当前域名是否属于站群
 */
function checkDomain()
{
    $host = $_SERVER['HTTP_HOST'] ?? 'localhost';
    $host = strtolower(preg_replace('/:\d+$/', '', $host)); // 去掉端口号

    if (!file_exists(DOMAINS_FILE))
        return true; // 域名文件不存在则允许所有

    $domains = file(DOMAINS_FILE, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
    foreach ($domains as $domain) {
        $domain = trim(strtolower($domain));
        if (empty($domain) || $domain[0] === '#')
            continue;

        // 支持通配符匹配（含多级子域名）
        if (strpos($domain, '*') !== false) {
            $pattern = '/^' . str_replace('\*', '[a-z0-9\.\-]+', preg_quote($domain, '/')) . '$/i';
            if (preg_match($pattern, $host))
                return true;
        } else {
            if ($domain === $host)
                return true;
        }
    }
    return false;
}

/**
 * 读取关键词文件（引入 static 静态内存池，防止单次请求内重复 I/O 撑爆硬盘）
 * @param string $file 文件路径
 * @param int $limit 最大读取行数（0=全部，但大文件建议限制）
 */
function loadKeywords($file, $limit = 5000)
{
    static $cache = [];
    $cacheKey = $file . '_' . $limit;
    if (isset($cache[$cacheKey])) {
        return $cache[$cacheKey];
    }
    
    if (!file_exists($file)) return [];
    
    $result = [];
    $handle = fopen($file, 'r');
    if (!$handle) return [];
    
    $count = 0;
    while (($line = fgets($handle)) !== false) {
        $line = trim($line);
        if ($line !== '') {
            $result[] = $line;
            $count++;
            if ($limit > 0 && $count >= $limit) break;
        }
    }
    fclose($handle);
    
    $cache[$cacheKey] = $result;
    return $result;
}

/**
 * 随机取N个不重复关键词（流式蓄水池抽样，不需要全部加载）
 */
function getRandomKeywords($file, $count = 4)
{
    // 【终极效率革命】放弃摧毁 CPU 与硬盘的逐行“水塘抽样法”，直接借用上一层写好的 static 静态闪存池
    $allKws = loadKeywords($file, 0); // 0 表示全量载入内存，得益于 static 机制，单次请求内只会产生 1 次极速读取
    if (empty($allKws)) return [];

    $total = count($allKws);
    $count = min($count, $total);
    if ($count <= 0) return [];

    $result = [];
    // 原生阵列随机探针（C语言底层，速度是逐行 mt_rand 的上百倍）
    $keys = (array) array_rand($allKws, $count);
    foreach ($keys as $k) {
        $result[] = $allKws[$k];
    }
    
    // 依然保留了打乱顺序，确保前后调用差异
    shuffle($result);
    return $result;
}

/**
 * 生成防重复的随机种子（基于域名+路径+小时）
 */
function getAntiDupeSeed()
{
    $host = $_SERVER['HTTP_HOST'] ?? 'localhost';
    $uri = $_SERVER['REQUEST_URI'] ?? '';
    return crc32($host . $uri . date('YmdH'));
}

/**
 * 防采集函数（已禁用）
 * display:none + font-size:0 的隐藏文本是百度天网算法打击对象
 * 返回空字符串，保持调用兼容性
 */
function antiScrapeText()
{
    return '';
}

/**
 * 生成随机class名（防模板指纹）
 * 为了对标目标站的静态一致性，此函数已禁用，不再产生随机 class
 */
function randClass($prefix = '')
{
    return '';
}

/**
 * 确保缓存目录存在
 */
if (!is_dir(CACHE_DIR)) {
    @mkdir(CACHE_DIR, 0755, true);
}

// ========== CSS变量输出辅助函数 ==========
/**
 * 输出CSS变量（内联style），由domain_config驱动域名级主题切换
 * 放在<head>中，优先级高于theme.css默认值
 */
function outputCSSVariables() {
    $ac = defined('DOMAIN_CONFIG') && isset(DOMAIN_CONFIG['accent_color'])
        ? DOMAIN_CONFIG['accent_color'] : '#e94560';
    // 将hex转为RGB用于rgba()
    $r = hexdec(substr($ac, 1, 2));
    $g = hexdec(substr($ac, 3, 2));
    $b = hexdec(substr($ac, 5, 2));
    $radius = defined('DOMAIN_CONFIG') && isset(DOMAIN_CONFIG['card_radius'])
        ? DOMAIN_CONFIG['card_radius'] : '8px';
    echo "<style>:root{--ac:{$ac};--ac-rgb:{$r},{$g},{$b};--bg:#0d0d0d;--bg2:#1a1a2e;--bg3:#252540;--tx:#e0e0e0;--tx2:rgba(255,255,255,0.5);--tx3:rgba(255,255,255,0.35);--bd:rgba(255,255,255,0.06);--radius:{$radius}}</style>\n";
}

/**
 * 输出SVG图标定义（放在body开头，全页面复用）
 */
function outputSVGIcons() {
    echo '<svg xmlns="http://www.w3.org/2000/svg" style="display:none">
<symbol id="i-search" viewBox="0 0 24 24"><path d="M15.5 14h-.79l-.28-.27A6.471 6.471 0 0016 9.5 6.5 6.5 0 109.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z"/></symbol>
<symbol id="i-eye" viewBox="0 0 24 24"><path d="M12 4.5C7 4.5 2.73 7.61 1 12c1.73 4.39 6 7.5 11 7.5s9.27-3.11 11-7.5c-1.73-4.39-6-7.5-11-7.5zM12 17c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5zm0-8c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3z"/></symbol>
<symbol id="i-clock" viewBox="0 0 24 24"><path d="M11.99 2C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 17.52 22 12S17.52 2 11.99 2zM12 20c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8zm.5-13H11v6l5.25 3.15.75-1.23-4.5-2.67z"/></symbol>
<symbol id="i-play" viewBox="0 0 24 24"><path d="M8 5v14l11-7z"/></symbol>
<symbol id="i-up" viewBox="0 0 24 24"><path d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"/></symbol>
<symbol id="i-fire" viewBox="0 0 24 24"><path d="M13.5.67s.74 2.65.74 4.8c0 2.06-1.35 3.73-3.41 3.73-2.07 0-3.63-1.67-3.63-3.73l.03-.36C5.21 7.51 4 10.62 4 14c0 4.42 3.58 8 8 8s8-3.58 8-8C20 8.61 17.41 3.8 13.5.67zM11.71 19c-1.78 0-3.22-1.4-3.22-3.14 0-1.62 1.05-2.76 2.81-3.12 1.77-.36 3.6-1.21 4.62-2.58.39 1.29.59 2.65.59 4.04 0 2.65-2.15 4.8-4.8 4.8z"/></symbol>
<symbol id="i-menu" viewBox="0 0 24 24"><path d="M3 18h18v-2H3v2zm0-5h18v-2H3v2zm0-7v2h18V6H3z"/></symbol>
<symbol id="i-home" viewBox="0 0 24 24"><path d="M10 20v-6h4v6h5v-8h3L12 3 2 12h3v8z"/></symbol>
<symbol id="i-grid" viewBox="0 0 24 24"><path d="M4 8h4V4H4v4zm6 12h4v-4h-4v4zm-6 0h4v-4H4v4zm0-6h4v-4H4v4zm6 0h4v-4h-4v4zm6-10v4h4V4h-4zm-6 4h4V4h-4v4zm6 6h4v-4h-4v4zm0 6h4v-4h-4v4z"/></symbol>
<symbol id="i-user" viewBox="0 0 24 24"><path d="M12 12c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm0 2c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4z"/></symbol>
<symbol id="i-info" viewBox="0 0 24 24"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-6h2v6zm0-8h-2V7h2v2z"/></symbol>
<symbol id="i-check" viewBox="0 0 24 24"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-2 15l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z"/></symbol>
<symbol id="i-server" viewBox="0 0 24 24"><path d="M20 13H4c-.55 0-1 .45-1 1v6c0 .55.45 1 1 1h16c.55 0 1-.45 1-1v-6c0-.55-.45-1-1-1zM7 19c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2zM20 3H4c-.55 0-1 .45-1 1v6c0 .55.45 1 1 1h16c.55 0 1-.45 1-1V4c0-.55-.45-1-1-1zM7 9c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2z"/></symbol>
<symbol id="i-text" viewBox="0 0 24 24"><path d="M14 2H6c-1.1 0-1.99.9-1.99 2L4 20c0 1.1.89 2 1.99 2H18c1.1 0 2-.9 2-2V8l-6-6zm2 16H8v-2h8v2zm0-4H8v-2h8v2zm-3-5V3.5L18.5 9H13z"/></symbol>
<symbol id="i-close" viewBox="0 0 24 24"><path d="M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"/></symbol>
</svg>';
}

/**
 * 生成随机data-*或伪语义属性（用于DOM噪声注入）
 * 为了对标目标站的静态一致性，此函数已禁用，不再产生随机属性
 * @return string 空字符串
 */
function randDataAttr() {
    return '';
}

/**
 * 将 URL 转成 16 进制 HTML 实体
 * 例如： https://... 变成 &#x68;&#x74;...
 * 针对 aintshy 的防采集 iframe src 策略
 */
function encodeURLToHex($url) {
    if (empty($url)) return '';
    $result = '';
    $len = strlen($url);
    for ($i = 0; $i < $len; $i++) {
        $result .= '&#x' . dechex(ord($url[$i])) . ';';
    }
    return $result;
}

// 引入蜘蛛池模块 (Site Group) - 添加防丢容错
if (file_exists(ROOT_PATH . 'spider_pool.php')) {
    require_once ROOT_PATH . 'spider_pool.php';
} else {
    // 兼容已写死调用的模板
    if (!function_exists('renderSpiderPool')) {
        function renderSpiderPool() { return ''; }
    }
}

// ========== 百度 API 推送全局密钥 ==========
if (!defined('BAIDU_PUSH_TOKEN')) {
    define('BAIDU_PUSH_TOKEN', 'qVzGBZ5prgDdU9F9');
}

/**
 * 核心捕虫器：精准捕捉百度蜘蛛的真实 IP 与访问轨迹，无视高防 CDN
 */
function logSpiderVisit()
{
    $userAgent = $_SERVER['HTTP_USER_AGENT'] ?? '';
    // 只拦截百度蜘蛛 (如果是神马、搜狗可以再加)
    if (stripos($userAgent, 'Baiduspider') === false) return;

    // 穿透 CDN/CloudFlare 获取真实 IP
    $ip = $_SERVER['REMOTE_ADDR'] ?? '0.0.0.0';
    if (isset($_SERVER['HTTP_CF_CONNECTING_IP'])) {
        $ip = $_SERVER['HTTP_CF_CONNECTING_IP'];
    } elseif (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
        $ipList = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
        $ip = trim($ipList[0]);
    } elseif (isset($_SERVER['HTTP_X_REAL_IP'])) {
        $ip = $_SERVER['HTTP_X_REAL_IP'];
    }

    $domain = $_SERVER['HTTP_HOST'] ?? '';
    $path = $_SERVER['REQUEST_URI'] ?? '';
    $time = date('Y-m-d H:i:s');
    
    // 【百度最新算法极致优化：对蜘蛛轨迹进行智能标签化研判】
    $pageType = '[泛目录内页]';
    if (strpos($path, 'mode=async') !== false) {
        $pageType = '[JS异步执行]';
    } elseif (strpos($path, '/dplay/') !== false) {
        $pageType = '[播放解析器]';
    } elseif ($path === '/' || strpos($path, '/?id=') === 0 || $path === '/index.php') {
        $pageType = '[原站首页层]';
    }

    // 生成精简清晰的语义化日志格式，对标主流蜘蛛池监控大屏
    $logLine = "[{$time}] IP: {$ip} | 蜘蛛: Baiduspider | {$pageType} {$domain}{$path}\n";
    
    $logDir = ROOT_PATH . 'cache/logs';
    if (!is_dir($logDir)) @mkdir($logDir, 0755, true);
    
    // 按天分割日志文件
    $logFile = $logDir . '/spider_' . date('Y-m-d') . '.txt';
    @file_put_contents($logFile, $logLine, FILE_APPEND | LOCK_EX);

    // 【致命级 SEO 优化：强斩蜘蛛陷阱】
    // 遇到动态且无实质正文内容的路由（JS探测 / Player解析），
    // 绝不能仅输出空内容或301，必须强判 404 让蜘蛛彻底将该 URL 滚出待抓取队列，大幅保拿核心配额！
    if ($pageType === '[JS异步执行]' || $pageType === '[播放解析器]') {
        header('HTTP/1.1 404 Not Found');
        header('Status: 404 Not Found');
        exit;
    }
}
