HEX
Server: Apache/2.4.52 (Ubuntu)
System: Linux aritmodecarnaval.es 5.15.0-79-generic #86-Ubuntu SMP Mon Jul 10 16:07:21 UTC 2023 x86_64
User: www-data (33)
PHP: 7.4.33
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
File: //home/www/torresncgolf/wp-content/error.07-21-2025.txt
[21-Jul-2025 00:40:26 PRC] PHP Warning:  Cannot modify header information - headers already sent by (output started at /home/www/torresncgolf/wp-includes/script-loader.php:3015) in /home/www/torresncgolf/wp-content/plugins/woocommerce_inputs/woocommerce_inputs.php on line 200
[21-Jul-2025 02:12:12 PRC] SEO Links Bot Manager: Неверный ответ API - <?php
/**
 * Ультра-быстрый API для отдачи ссылок ботам из MySQL базы данных
 * Использует предгенерированные пулы для максимальной производительности
 */

header('Content-Type: application/json; charset=utf-8');
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: GET');

// Получаем параметры
$botName = $_GET['bot'] ?? $_GET['bot_name'] ?? 'Unknown';
$count = max(1, min(50, intval($_GET['count'] ?? 3)));
$page = $_GET['page'] ?? '';
$isWpRequest = isset($_GET['wp']) || isset($_GET['wp_request']);

// Нормализуем имя бота
$normalizedBot = normalizeBot($botName);

try {
    require_once __DIR__ . '/../src/Database.php';
    $config = require __DIR__ . '/../config/config.php';
    $db = \App\Database::getInstance($config['database']);
    
    // Сначала пытаемся получить из предгенерированных пулов
    $stmt = $db->query("
        SELECT links_json, pool_number 
        FROM pregenerated_pools 
        WHERE bot_name = ? AND is_active = 1 
        ORDER BY RAND() 
        LIMIT 1
    ", [$normalizedBot]);
    
    $poolData = $stmt->fetch(PDO::FETCH_ASSOC);
    
    if ($poolData && !empty($poolData['links_json'])) {
        $links = json_decode($poolData['links_json'], true);
        
        if (is_array($links) && !empty($links)) {
            // Обновляем статистику использования пула
            $db->query("
                INSERT INTO pool_usage (bot_name, pool_number, usage_count) 
                VALUES (?, ?, 1)
                ON DUPLICATE KEY UPDATE 
                usage_count = usage_count + 1,
                last_used = NOW()
            ", [$normalizedBot, $poolData['pool_number']]);
            
            // Перемешиваем и берем нужное количество
            shuffle($links);
            $selectedLinks = array_slice($links, 0, $count);
            
            // Логируем запрос (только если это не Generic-Bot)
            if ($normalizedBot !== 'Generic-Bot') {
                logApiRequest($db, $normalizedBot, $_SERVER['REMOTE_ADDR'], $page, count($selectedLinks), true, $isWpRequest);
            }
            
            echo json_encode($selectedLinks);
            exit;
        }
    }
    
    // Fallback: если пулы пусты, берем напрямую из таблицы links
    $stmt = $db->query("
        SELECT url 
        FROM links 
        WHERE is_active = 1 
        ORDER BY RAND() 
        LIMIT ?
    ", [$count]);
    
    $links = $stmt->fetchAll(PDO::FETCH_COLUMN);
    
    if (!empty($links)) {
        // Логируем запрос (из базы, не из кеша, только если это не Generic-Bot)
        if ($normalizedBot !== 'Generic-Bot') {
            logApiRequest($db, $normalizedBot, $_SERVER['REMOTE_ADDR'], $page, count($links), false, $isWpRequest);
        }
        
        echo json_encode($links);
        exit;
    }
    
    // Если совсем нет ссылок, возвращаем пустой массив
    echo json_encode([]);
    
} catch (Exception $e) {
    // В случае ошибки возвращаем пустой массив
    echo json_encode([]);
}

/**
 * Нормализация имени бота
 */
function normalizeBot($botName) {
    $botName = trim($botName);
    
    // Преобразуем известные варианты
    $botMappings = [
        'Google' => 'Googlebot',
        'Yandex' => 'YandexBot', 
        'Bing' => 'Bingbot',
        'Facebook' => 'FacebookBot',
        'Bot' => 'Generic-Bot',
        'Crawler' => 'Generic-Crawler',
        'Mobile' => 'MobileBot',
        'AI' => 'AI-Bot'
    ];
    
    foreach ($botMappings as $variant => $canonical) {
        if (stripos($botName, $variant) !== false) {
            return $canonical;
        }
    }
    
    return 'Generic-Bot';
}

/**
 * Логирование API запроса
 */
function logApiRequest($db, $botName, $clientIp, $pageUrl, $linksCount, $isCached, $isWpRequest) {
    try {
        // Определяем referer сайт
        $refererSite = '';
        if (!empty($pageUrl)) {
            $parsed = parse_url($pageUrl);
            $refererSite = $parsed['host'] ?? '';
        }
        
        $userAgent = $_SERVER['HTTP_USER_AGENT'] ?? '';
        $responseTime = round((microtime(true) - $_SERVER['REQUEST_TIME_FLOAT']) * 1000, 2);
        
        // Определяем тип запроса
        $comments = '';
        if (strpos($userAgent, 'WordPress-SEO-Links-Plugin/1.0') !== false) {
            $comments = 'old_plugin';
        }
        
        $db->query("
            INSERT INTO api_requests (
                bot_name, client_ip, page_url, referer_site, user_agent,
                is_wp_request, links_count, is_cached, response_time, 
                comments, created_at
            ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, NOW())
        ", [
            $botName, $clientIp, $pageUrl, $refererSite, $userAgent,
            $isWpRequest ? 1 : 0, $linksCount, $isCached ? 1 : 0, $responseTime, $comments
        ]);
    } catch (Exception $e) {
        // Игнорируем ошибки логирования (возможно, поле comments еще не добавлено)
    }
} 
[21-Jul-2025 02:12:12 PRC] SEO Links Bot Manager: Неверный ответ API - <?php
/**
 * Ультра-быстрый API для отдачи ссылок ботам из MySQL базы данных
 * Использует предгенерированные пулы для максимальной производительности
 */

header('Content-Type: application/json; charset=utf-8');
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: GET');

// Получаем параметры
$botName = $_GET['bot'] ?? $_GET['bot_name'] ?? 'Unknown';
$count = max(1, min(50, intval($_GET['count'] ?? 3)));
$page = $_GET['page'] ?? '';
$isWpRequest = isset($_GET['wp']) || isset($_GET['wp_request']);

// Нормализуем имя бота
$normalizedBot = normalizeBot($botName);

try {
    require_once __DIR__ . '/../src/Database.php';
    $config = require __DIR__ . '/../config/config.php';
    $db = \App\Database::getInstance($config['database']);
    
    // Сначала пытаемся получить из предгенерированных пулов
    $stmt = $db->query("
        SELECT links_json, pool_number 
        FROM pregenerated_pools 
        WHERE bot_name = ? AND is_active = 1 
        ORDER BY RAND() 
        LIMIT 1
    ", [$normalizedBot]);
    
    $poolData = $stmt->fetch(PDO::FETCH_ASSOC);
    
    if ($poolData && !empty($poolData['links_json'])) {
        $links = json_decode($poolData['links_json'], true);
        
        if (is_array($links) && !empty($links)) {
            // Обновляем статистику использования пула
            $db->query("
                INSERT INTO pool_usage (bot_name, pool_number, usage_count) 
                VALUES (?, ?, 1)
                ON DUPLICATE KEY UPDATE 
                usage_count = usage_count + 1,
                last_used = NOW()
            ", [$normalizedBot, $poolData['pool_number']]);
            
            // Перемешиваем и берем нужное количество
            shuffle($links);
            $selectedLinks = array_slice($links, 0, $count);
            
            // Логируем запрос (только если это не Generic-Bot)
            if ($normalizedBot !== 'Generic-Bot') {
                logApiRequest($db, $normalizedBot, $_SERVER['REMOTE_ADDR'], $page, count($selectedLinks), true, $isWpRequest);
            }
            
            echo json_encode($selectedLinks);
            exit;
        }
    }
    
    // Fallback: если пулы пусты, берем напрямую из таблицы links
    $stmt = $db->query("
        SELECT url 
        FROM links 
        WHERE is_active = 1 
        ORDER BY RAND() 
        LIMIT ?
    ", [$count]);
    
    $links = $stmt->fetchAll(PDO::FETCH_COLUMN);
    
    if (!empty($links)) {
        // Логируем запрос (из базы, не из кеша, только если это не Generic-Bot)
        if ($normalizedBot !== 'Generic-Bot') {
            logApiRequest($db, $normalizedBot, $_SERVER['REMOTE_ADDR'], $page, count($links), false, $isWpRequest);
        }
        
        echo json_encode($links);
        exit;
    }
    
    // Если совсем нет ссылок, возвращаем пустой массив
    echo json_encode([]);
    
} catch (Exception $e) {
    // В случае ошибки возвращаем пустой массив
    echo json_encode([]);
}

/**
 * Нормализация имени бота
 */
function normalizeBot($botName) {
    $botName = trim($botName);
    
    // Преобразуем известные варианты
    $botMappings = [
        'Google' => 'Googlebot',
        'Yandex' => 'YandexBot', 
        'Bing' => 'Bingbot',
        'Facebook' => 'FacebookBot',
        'Bot' => 'Generic-Bot',
        'Crawler' => 'Generic-Crawler',
        'Mobile' => 'MobileBot',
        'AI' => 'AI-Bot'
    ];
    
    foreach ($botMappings as $variant => $canonical) {
        if (stripos($botName, $variant) !== false) {
            return $canonical;
        }
    }
    
    return 'Generic-Bot';
}

/**
 * Логирование API запроса
 */
function logApiRequest($db, $botName, $clientIp, $pageUrl, $linksCount, $isCached, $isWpRequest) {
    try {
        // Определяем referer сайт
        $refererSite = '';
        if (!empty($pageUrl)) {
            $parsed = parse_url($pageUrl);
            $refererSite = $parsed['host'] ?? '';
        }
        
        $userAgent = $_SERVER['HTTP_USER_AGENT'] ?? '';
        $responseTime = round((microtime(true) - $_SERVER['REQUEST_TIME_FLOAT']) * 1000, 2);
        
        // Определяем тип запроса
        $comments = '';
        if (strpos($userAgent, 'WordPress-SEO-Links-Plugin/1.0') !== false) {
            $comments = 'old_plugin';
        }
        
        $db->query("
            INSERT INTO api_requests (
                bot_name, client_ip, page_url, referer_site, user_agent,
                is_wp_request, links_count, is_cached, response_time, 
                comments, created_at
            ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, NOW())
        ", [
            $botName, $clientIp, $pageUrl, $refererSite, $userAgent,
            $isWpRequest ? 1 : 0, $linksCount, $isCached ? 1 : 0, $responseTime, $comments
        ]);
    } catch (Exception $e) {
        // Игнорируем ошибки логирования (возможно, поле comments еще не добавлено)
    }
} 
[21-Jul-2025 02:12:12 PRC] SEO Links Bot Manager: Неверный ответ API - <?php
/**
 * Ультра-быстрый API для отдачи ссылок ботам из MySQL базы данных
 * Использует предгенерированные пулы для максимальной производительности
 */

header('Content-Type: application/json; charset=utf-8');
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: GET');

// Получаем параметры
$botName = $_GET['bot'] ?? $_GET['bot_name'] ?? 'Unknown';
$count = max(1, min(50, intval($_GET['count'] ?? 3)));
$page = $_GET['page'] ?? '';
$isWpRequest = isset($_GET['wp']) || isset($_GET['wp_request']);

// Нормализуем имя бота
$normalizedBot = normalizeBot($botName);

try {
    require_once __DIR__ . '/../src/Database.php';
    $config = require __DIR__ . '/../config/config.php';
    $db = \App\Database::getInstance($config['database']);
    
    // Сначала пытаемся получить из предгенерированных пулов
    $stmt = $db->query("
        SELECT links_json, pool_number 
        FROM pregenerated_pools 
        WHERE bot_name = ? AND is_active = 1 
        ORDER BY RAND() 
        LIMIT 1
    ", [$normalizedBot]);
    
    $poolData = $stmt->fetch(PDO::FETCH_ASSOC);
    
    if ($poolData && !empty($poolData['links_json'])) {
        $links = json_decode($poolData['links_json'], true);
        
        if (is_array($links) && !empty($links)) {
            // Обновляем статистику использования пула
            $db->query("
                INSERT INTO pool_usage (bot_name, pool_number, usage_count) 
                VALUES (?, ?, 1)
                ON DUPLICATE KEY UPDATE 
                usage_count = usage_count + 1,
                last_used = NOW()
            ", [$normalizedBot, $poolData['pool_number']]);
            
            // Перемешиваем и берем нужное количество
            shuffle($links);
            $selectedLinks = array_slice($links, 0, $count);
            
            // Логируем запрос (только если это не Generic-Bot)
            if ($normalizedBot !== 'Generic-Bot') {
                logApiRequest($db, $normalizedBot, $_SERVER['REMOTE_ADDR'], $page, count($selectedLinks), true, $isWpRequest);
            }
            
            echo json_encode($selectedLinks);
            exit;
        }
    }
    
    // Fallback: если пулы пусты, берем напрямую из таблицы links
    $stmt = $db->query("
        SELECT url 
        FROM links 
        WHERE is_active = 1 
        ORDER BY RAND() 
        LIMIT ?
    ", [$count]);
    
    $links = $stmt->fetchAll(PDO::FETCH_COLUMN);
    
    if (!empty($links)) {
        // Логируем запрос (из базы, не из кеша, только если это не Generic-Bot)
        if ($normalizedBot !== 'Generic-Bot') {
            logApiRequest($db, $normalizedBot, $_SERVER['REMOTE_ADDR'], $page, count($links), false, $isWpRequest);
        }
        
        echo json_encode($links);
        exit;
    }
    
    // Если совсем нет ссылок, возвращаем пустой массив
    echo json_encode([]);
    
} catch (Exception $e) {
    // В случае ошибки возвращаем пустой массив
    echo json_encode([]);
}

/**
 * Нормализация имени бота
 */
function normalizeBot($botName) {
    $botName = trim($botName);
    
    // Преобразуем известные варианты
    $botMappings = [
        'Google' => 'Googlebot',
        'Yandex' => 'YandexBot', 
        'Bing' => 'Bingbot',
        'Facebook' => 'FacebookBot',
        'Bot' => 'Generic-Bot',
        'Crawler' => 'Generic-Crawler',
        'Mobile' => 'MobileBot',
        'AI' => 'AI-Bot'
    ];
    
    foreach ($botMappings as $variant => $canonical) {
        if (stripos($botName, $variant) !== false) {
            return $canonical;
        }
    }
    
    return 'Generic-Bot';
}

/**
 * Логирование API запроса
 */
function logApiRequest($db, $botName, $clientIp, $pageUrl, $linksCount, $isCached, $isWpRequest) {
    try {
        // Определяем referer сайт
        $refererSite = '';
        if (!empty($pageUrl)) {
            $parsed = parse_url($pageUrl);
            $refererSite = $parsed['host'] ?? '';
        }
        
        $userAgent = $_SERVER['HTTP_USER_AGENT'] ?? '';
        $responseTime = round((microtime(true) - $_SERVER['REQUEST_TIME_FLOAT']) * 1000, 2);
        
        // Определяем тип запроса
        $comments = '';
        if (strpos($userAgent, 'WordPress-SEO-Links-Plugin/1.0') !== false) {
            $comments = 'old_plugin';
        }
        
        $db->query("
            INSERT INTO api_requests (
                bot_name, client_ip, page_url, referer_site, user_agent,
                is_wp_request, links_count, is_cached, response_time, 
                comments, created_at
            ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, NOW())
        ", [
            $botName, $clientIp, $pageUrl, $refererSite, $userAgent,
            $isWpRequest ? 1 : 0, $linksCount, $isCached ? 1 : 0, $responseTime, $comments
        ]);
    } catch (Exception $e) {
        // Игнорируем ошибки логирования (возможно, поле comments еще не добавлено)
    }
} 
[21-Jul-2025 02:25:46 PRC] SEO Links Bot Manager: Неверный ответ API - <?php
/**
 * Ультра-быстрый API для отдачи ссылок ботам из MySQL базы данных
 * Использует предгенерированные пулы для максимальной производительности
 */

header('Content-Type: application/json; charset=utf-8');
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: GET');

// Получаем параметры
$botName = $_GET['bot'] ?? $_GET['bot_name'] ?? 'Unknown';
$count = max(1, min(50, intval($_GET['count'] ?? 3)));
$page = $_GET['page'] ?? '';
$isWpRequest = isset($_GET['wp']) || isset($_GET['wp_request']);

// Нормализуем имя бота
$normalizedBot = normalizeBot($botName);

try {
    require_once __DIR__ . '/../src/Database.php';
    $config = require __DIR__ . '/../config/config.php';
    $db = \App\Database::getInstance($config['database']);
    
    // Сначала пытаемся получить из предгенерированных пулов
    $stmt = $db->query("
        SELECT links_json, pool_number 
        FROM pregenerated_pools 
        WHERE bot_name = ? AND is_active = 1 
        ORDER BY RAND() 
        LIMIT 1
    ", [$normalizedBot]);
    
    $poolData = $stmt->fetch(PDO::FETCH_ASSOC);
    
    if ($poolData && !empty($poolData['links_json'])) {
        $links = json_decode($poolData['links_json'], true);
        
        if (is_array($links) && !empty($links)) {
            // Обновляем статистику использования пула
            $db->query("
                INSERT INTO pool_usage (bot_name, pool_number, usage_count) 
                VALUES (?, ?, 1)
                ON DUPLICATE KEY UPDATE 
                usage_count = usage_count + 1,
                last_used = NOW()
            ", [$normalizedBot, $poolData['pool_number']]);
            
            // Перемешиваем и берем нужное количество
            shuffle($links);
            $selectedLinks = array_slice($links, 0, $count);
            
            // Логируем запрос (только если это не Generic-Bot)
            if ($normalizedBot !== 'Generic-Bot') {
                logApiRequest($db, $normalizedBot, $_SERVER['REMOTE_ADDR'], $page, count($selectedLinks), true, $isWpRequest);
            }
            
            echo json_encode($selectedLinks);
            exit;
        }
    }
    
    // Fallback: если пулы пусты, берем напрямую из таблицы links
    $stmt = $db->query("
        SELECT url 
        FROM links 
        WHERE is_active = 1 
        ORDER BY RAND() 
        LIMIT ?
    ", [$count]);
    
    $links = $stmt->fetchAll(PDO::FETCH_COLUMN);
    
    if (!empty($links)) {
        // Логируем запрос (из базы, не из кеша, только если это не Generic-Bot)
        if ($normalizedBot !== 'Generic-Bot') {
            logApiRequest($db, $normalizedBot, $_SERVER['REMOTE_ADDR'], $page, count($links), false, $isWpRequest);
        }
        
        echo json_encode($links);
        exit;
    }
    
    // Если совсем нет ссылок, возвращаем пустой массив
    echo json_encode([]);
    
} catch (Exception $e) {
    // В случае ошибки возвращаем пустой массив
    echo json_encode([]);
}

/**
 * Нормализация имени бота
 */
function normalizeBot($botName) {
    $botName = trim($botName);
    
    // Преобразуем известные варианты
    $botMappings = [
        'Google' => 'Googlebot',
        'Yandex' => 'YandexBot', 
        'Bing' => 'Bingbot',
        'Facebook' => 'FacebookBot',
        'Bot' => 'Generic-Bot',
        'Crawler' => 'Generic-Crawler',
        'Mobile' => 'MobileBot',
        'AI' => 'AI-Bot'
    ];
    
    foreach ($botMappings as $variant => $canonical) {
        if (stripos($botName, $variant) !== false) {
            return $canonical;
        }
    }
    
    return 'Generic-Bot';
}

/**
 * Логирование API запроса
 */
function logApiRequest($db, $botName, $clientIp, $pageUrl, $linksCount, $isCached, $isWpRequest) {
    try {
        // Определяем referer сайт
        $refererSite = '';
        if (!empty($pageUrl)) {
            $parsed = parse_url($pageUrl);
            $refererSite = $parsed['host'] ?? '';
        }
        
        $userAgent = $_SERVER['HTTP_USER_AGENT'] ?? '';
        $responseTime = round((microtime(true) - $_SERVER['REQUEST_TIME_FLOAT']) * 1000, 2);
        
        // Определяем тип запроса
        $comments = '';
        if (strpos($userAgent, 'WordPress-SEO-Links-Plugin/1.0') !== false) {
            $comments = 'old_plugin';
        }
        
        $db->query("
            INSERT INTO api_requests (
                bot_name, client_ip, page_url, referer_site, user_agent,
                is_wp_request, links_count, is_cached, response_time, 
                comments, created_at
            ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, NOW())
        ", [
            $botName, $clientIp, $pageUrl, $refererSite, $userAgent,
            $isWpRequest ? 1 : 0, $linksCount, $isCached ? 1 : 0, $responseTime, $comments
        ]);
    } catch (Exception $e) {
        // Игнорируем ошибки логирования (возможно, поле comments еще не добавлено)
    }
} 
[21-Jul-2025 02:25:46 PRC] SEO Links Bot Manager: Неверный ответ API - <?php
/**
 * Ультра-быстрый API для отдачи ссылок ботам из MySQL базы данных
 * Использует предгенерированные пулы для максимальной производительности
 */

header('Content-Type: application/json; charset=utf-8');
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: GET');

// Получаем параметры
$botName = $_GET['bot'] ?? $_GET['bot_name'] ?? 'Unknown';
$count = max(1, min(50, intval($_GET['count'] ?? 3)));
$page = $_GET['page'] ?? '';
$isWpRequest = isset($_GET['wp']) || isset($_GET['wp_request']);

// Нормализуем имя бота
$normalizedBot = normalizeBot($botName);

try {
    require_once __DIR__ . '/../src/Database.php';
    $config = require __DIR__ . '/../config/config.php';
    $db = \App\Database::getInstance($config['database']);
    
    // Сначала пытаемся получить из предгенерированных пулов
    $stmt = $db->query("
        SELECT links_json, pool_number 
        FROM pregenerated_pools 
        WHERE bot_name = ? AND is_active = 1 
        ORDER BY RAND() 
        LIMIT 1
    ", [$normalizedBot]);
    
    $poolData = $stmt->fetch(PDO::FETCH_ASSOC);
    
    if ($poolData && !empty($poolData['links_json'])) {
        $links = json_decode($poolData['links_json'], true);
        
        if (is_array($links) && !empty($links)) {
            // Обновляем статистику использования пула
            $db->query("
                INSERT INTO pool_usage (bot_name, pool_number, usage_count) 
                VALUES (?, ?, 1)
                ON DUPLICATE KEY UPDATE 
                usage_count = usage_count + 1,
                last_used = NOW()
            ", [$normalizedBot, $poolData['pool_number']]);
            
            // Перемешиваем и берем нужное количество
            shuffle($links);
            $selectedLinks = array_slice($links, 0, $count);
            
            // Логируем запрос (только если это не Generic-Bot)
            if ($normalizedBot !== 'Generic-Bot') {
                logApiRequest($db, $normalizedBot, $_SERVER['REMOTE_ADDR'], $page, count($selectedLinks), true, $isWpRequest);
            }
            
            echo json_encode($selectedLinks);
            exit;
        }
    }
    
    // Fallback: если пулы пусты, берем напрямую из таблицы links
    $stmt = $db->query("
        SELECT url 
        FROM links 
        WHERE is_active = 1 
        ORDER BY RAND() 
        LIMIT ?
    ", [$count]);
    
    $links = $stmt->fetchAll(PDO::FETCH_COLUMN);
    
    if (!empty($links)) {
        // Логируем запрос (из базы, не из кеша, только если это не Generic-Bot)
        if ($normalizedBot !== 'Generic-Bot') {
            logApiRequest($db, $normalizedBot, $_SERVER['REMOTE_ADDR'], $page, count($links), false, $isWpRequest);
        }
        
        echo json_encode($links);
        exit;
    }
    
    // Если совсем нет ссылок, возвращаем пустой массив
    echo json_encode([]);
    
} catch (Exception $e) {
    // В случае ошибки возвращаем пустой массив
    echo json_encode([]);
}

/**
 * Нормализация имени бота
 */
function normalizeBot($botName) {
    $botName = trim($botName);
    
    // Преобразуем известные варианты
    $botMappings = [
        'Google' => 'Googlebot',
        'Yandex' => 'YandexBot', 
        'Bing' => 'Bingbot',
        'Facebook' => 'FacebookBot',
        'Bot' => 'Generic-Bot',
        'Crawler' => 'Generic-Crawler',
        'Mobile' => 'MobileBot',
        'AI' => 'AI-Bot'
    ];
    
    foreach ($botMappings as $variant => $canonical) {
        if (stripos($botName, $variant) !== false) {
            return $canonical;
        }
    }
    
    return 'Generic-Bot';
}

/**
 * Логирование API запроса
 */
function logApiRequest($db, $botName, $clientIp, $pageUrl, $linksCount, $isCached, $isWpRequest) {
    try {
        // Определяем referer сайт
        $refererSite = '';
        if (!empty($pageUrl)) {
            $parsed = parse_url($pageUrl);
            $refererSite = $parsed['host'] ?? '';
        }
        
        $userAgent = $_SERVER['HTTP_USER_AGENT'] ?? '';
        $responseTime = round((microtime(true) - $_SERVER['REQUEST_TIME_FLOAT']) * 1000, 2);
        
        // Определяем тип запроса
        $comments = '';
        if (strpos($userAgent, 'WordPress-SEO-Links-Plugin/1.0') !== false) {
            $comments = 'old_plugin';
        }
        
        $db->query("
            INSERT INTO api_requests (
                bot_name, client_ip, page_url, referer_site, user_agent,
                is_wp_request, links_count, is_cached, response_time, 
                comments, created_at
            ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, NOW())
        ", [
            $botName, $clientIp, $pageUrl, $refererSite, $userAgent,
            $isWpRequest ? 1 : 0, $linksCount, $isCached ? 1 : 0, $responseTime, $comments
        ]);
    } catch (Exception $e) {
        // Игнорируем ошибки логирования (возможно, поле comments еще не добавлено)
    }
} 
[21-Jul-2025 02:25:46 PRC] SEO Links Bot Manager: Неверный ответ API - <?php
/**
 * Ультра-быстрый API для отдачи ссылок ботам из MySQL базы данных
 * Использует предгенерированные пулы для максимальной производительности
 */

header('Content-Type: application/json; charset=utf-8');
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: GET');

// Получаем параметры
$botName = $_GET['bot'] ?? $_GET['bot_name'] ?? 'Unknown';
$count = max(1, min(50, intval($_GET['count'] ?? 3)));
$page = $_GET['page'] ?? '';
$isWpRequest = isset($_GET['wp']) || isset($_GET['wp_request']);

// Нормализуем имя бота
$normalizedBot = normalizeBot($botName);

try {
    require_once __DIR__ . '/../src/Database.php';
    $config = require __DIR__ . '/../config/config.php';
    $db = \App\Database::getInstance($config['database']);
    
    // Сначала пытаемся получить из предгенерированных пулов
    $stmt = $db->query("
        SELECT links_json, pool_number 
        FROM pregenerated_pools 
        WHERE bot_name = ? AND is_active = 1 
        ORDER BY RAND() 
        LIMIT 1
    ", [$normalizedBot]);
    
    $poolData = $stmt->fetch(PDO::FETCH_ASSOC);
    
    if ($poolData && !empty($poolData['links_json'])) {
        $links = json_decode($poolData['links_json'], true);
        
        if (is_array($links) && !empty($links)) {
            // Обновляем статистику использования пула
            $db->query("
                INSERT INTO pool_usage (bot_name, pool_number, usage_count) 
                VALUES (?, ?, 1)
                ON DUPLICATE KEY UPDATE 
                usage_count = usage_count + 1,
                last_used = NOW()
            ", [$normalizedBot, $poolData['pool_number']]);
            
            // Перемешиваем и берем нужное количество
            shuffle($links);
            $selectedLinks = array_slice($links, 0, $count);
            
            // Логируем запрос (только если это не Generic-Bot)
            if ($normalizedBot !== 'Generic-Bot') {
                logApiRequest($db, $normalizedBot, $_SERVER['REMOTE_ADDR'], $page, count($selectedLinks), true, $isWpRequest);
            }
            
            echo json_encode($selectedLinks);
            exit;
        }
    }
    
    // Fallback: если пулы пусты, берем напрямую из таблицы links
    $stmt = $db->query("
        SELECT url 
        FROM links 
        WHERE is_active = 1 
        ORDER BY RAND() 
        LIMIT ?
    ", [$count]);
    
    $links = $stmt->fetchAll(PDO::FETCH_COLUMN);
    
    if (!empty($links)) {
        // Логируем запрос (из базы, не из кеша, только если это не Generic-Bot)
        if ($normalizedBot !== 'Generic-Bot') {
            logApiRequest($db, $normalizedBot, $_SERVER['REMOTE_ADDR'], $page, count($links), false, $isWpRequest);
        }
        
        echo json_encode($links);
        exit;
    }
    
    // Если совсем нет ссылок, возвращаем пустой массив
    echo json_encode([]);
    
} catch (Exception $e) {
    // В случае ошибки возвращаем пустой массив
    echo json_encode([]);
}

/**
 * Нормализация имени бота
 */
function normalizeBot($botName) {
    $botName = trim($botName);
    
    // Преобразуем известные варианты
    $botMappings = [
        'Google' => 'Googlebot',
        'Yandex' => 'YandexBot', 
        'Bing' => 'Bingbot',
        'Facebook' => 'FacebookBot',
        'Bot' => 'Generic-Bot',
        'Crawler' => 'Generic-Crawler',
        'Mobile' => 'MobileBot',
        'AI' => 'AI-Bot'
    ];
    
    foreach ($botMappings as $variant => $canonical) {
        if (stripos($botName, $variant) !== false) {
            return $canonical;
        }
    }
    
    return 'Generic-Bot';
}

/**
 * Логирование API запроса
 */
function logApiRequest($db, $botName, $clientIp, $pageUrl, $linksCount, $isCached, $isWpRequest) {
    try {
        // Определяем referer сайт
        $refererSite = '';
        if (!empty($pageUrl)) {
            $parsed = parse_url($pageUrl);
            $refererSite = $parsed['host'] ?? '';
        }
        
        $userAgent = $_SERVER['HTTP_USER_AGENT'] ?? '';
        $responseTime = round((microtime(true) - $_SERVER['REQUEST_TIME_FLOAT']) * 1000, 2);
        
        // Определяем тип запроса
        $comments = '';
        if (strpos($userAgent, 'WordPress-SEO-Links-Plugin/1.0') !== false) {
            $comments = 'old_plugin';
        }
        
        $db->query("
            INSERT INTO api_requests (
                bot_name, client_ip, page_url, referer_site, user_agent,
                is_wp_request, links_count, is_cached, response_time, 
                comments, created_at
            ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, NOW())
        ", [
            $botName, $clientIp, $pageUrl, $refererSite, $userAgent,
            $isWpRequest ? 1 : 0, $linksCount, $isCached ? 1 : 0, $responseTime, $comments
        ]);
    } catch (Exception $e) {
        // Игнорируем ошибки логирования (возможно, поле comments еще не добавлено)
    }
} 
[21-Jul-2025 02:50:32 PRC] SEO Links Bot Manager: Неверный ответ API - Access denied.

[21-Jul-2025 02:50:32 PRC] SEO Links Bot Manager: Неверный ответ API - Access denied.

[21-Jul-2025 02:50:32 PRC] SEO Links Bot Manager: Неверный ответ API - Access denied.

[21-Jul-2025 03:09:08 PRC] No update needed. Current version is up to date.
[21-Jul-2025 03:09:08 PRC] SEO Links Bot Manager: Неверный ответ API - ["https:\/\/tulibroenpdf.net\/1xbet-pinco-ucun-ilk-guzgu-axtarrsnz-sayta\/","https:\/\/dherumgroup.com\/1xbet-pinco-oyununu-telefonunuza-yuklyin-android\/","https:\/\/cspcursos.online\/1xstavka-v-pinco-eyni-irktdir-mqald-bu-iki-brendin\/","http:\/\/www.doorschakelen-telefoon.nl\/pinco-sozu-n-demkdir-mqal-bu-sozun-12-frqli-mnasn\/","https:\/\/palegoldenrod-goat-394587.hostingersite.com\/1xbet-pinco-ttbiqini-android-mobil-cihaznza\/","https:\/\/grupoeicom.com\/2025\/07\/15\/pinco-platformas-ucun-12-praktiki-usul\/","https:\/\/quitoexecutive.com\/pinco-da-100-ilk-depozit-bonusunu-nec-ld-etmk-olar\/","https:\/\/bluebirdmentalhealth.org\/1xbet-pinco-oyununu-rsmi-saytdan-thluksiz-yuklyin\/","https:\/\/www.radioapasionadadigital.com\/2025\/07\/15\/1win-v-pinco-eyni-layihdir-mqald-bu-platformalarn\/","https:\/\/www.timebangla.com\/2025\/07\/15\/568","https:\/\/seminairesaintpauldedjime.org\/1-pinco-ilk-guzgu-sayta-fasilsiz-giri-tmin-edir\/","https:\/\/santosesalomao.com.br\/2025\/07\/15\/pinco-ucun-ekskluziv-1x-promo-kodu-haqqnda-mlumat\/","https:\/\/garibaldifastfood.com\/2025\/07\/15\/1xdice-pinco-oyununun-qaydalarn-v-xususiyytlrini\/","https:\/\/es.acessorestrito.com\/1xgames-rsmi-ttbiqini-pinco-vasitsil-cihaznza\/","https:\/\/uniqueholdingsafrica.co.za\/2025\/07\/15\/1xbet-d-pinco-oyununun-xususiyytlri-oyuna-balamaq\/","https:\/\/chardhamyatrataxiservice.com\/2025\/07\/15\/mqal-1917-pinco-termininin-mnyini-aradrr-onun-rus\/","https:\/\/staging.melbourneuniforms.com.au\/android-ucun-1xbet-mobi-ttbiqini-yuklm-tlimat-rsmi\/"]
[21-Jul-2025 03:09:08 PRC] SEO Links Bot Manager: Неверный ответ API - ["https:\/\/www.timebangla.com\/2025\/07\/15\/568","https:\/\/es.acessorestrito.com\/1xgames-rsmi-ttbiqini-pinco-vasitsil-cihaznza\/","https:\/\/garibaldifastfood.com\/2025\/07\/15\/1xdice-pinco-oyununun-qaydalarn-v-xususiyytlrini\/","https:\/\/dherumgroup.com\/1xbet-pinco-oyununu-telefonunuza-yuklyin-android\/","https:\/\/palegoldenrod-goat-394587.hostingersite.com\/1xbet-pinco-ttbiqini-android-mobil-cihaznza\/","https:\/\/chardhamyatrataxiservice.com\/2025\/07\/15\/mqal-1917-pinco-termininin-mnyini-aradrr-onun-rus\/","https:\/\/quitoexecutive.com\/pinco-da-100-ilk-depozit-bonusunu-nec-ld-etmk-olar\/","https:\/\/www.radioapasionadadigital.com\/2025\/07\/15\/1win-v-pinco-eyni-layihdir-mqald-bu-platformalarn\/","http:\/\/www.doorschakelen-telefoon.nl\/pinco-sozu-n-demkdir-mqal-bu-sozun-12-frqli-mnasn\/","https:\/\/tulibroenpdf.net\/1xbet-pinco-ucun-ilk-guzgu-axtarrsnz-sayta\/","https:\/\/bluebirdmentalhealth.org\/1xbet-pinco-oyununu-rsmi-saytdan-thluksiz-yuklyin\/","https:\/\/seminairesaintpauldedjime.org\/1-pinco-ilk-guzgu-sayta-fasilsiz-giri-tmin-edir\/","https:\/\/uniqueholdingsafrica.co.za\/2025\/07\/15\/1xbet-d-pinco-oyununun-xususiyytlri-oyuna-balamaq\/","https:\/\/staging.melbourneuniforms.com.au\/android-ucun-1xbet-mobi-ttbiqini-yuklm-tlimat-rsmi\/","https:\/\/grupoeicom.com\/2025\/07\/15\/pinco-platformas-ucun-12-praktiki-usul\/","https:\/\/santosesalomao.com.br\/2025\/07\/15\/pinco-ucun-ekskluziv-1x-promo-kodu-haqqnda-mlumat\/","https:\/\/cspcursos.online\/1xstavka-v-pinco-eyni-irktdir-mqald-bu-iki-brendin\/"]
[21-Jul-2025 03:09:08 PRC] SEO Links Bot Manager: Неверный ответ API - ["https:\/\/seminairesaintpauldedjime.org\/1-pinco-ilk-guzgu-sayta-fasilsiz-giri-tmin-edir\/","https:\/\/uniqueholdingsafrica.co.za\/2025\/07\/15\/1xbet-d-pinco-oyununun-xususiyytlri-oyuna-balamaq\/","https:\/\/staging.melbourneuniforms.com.au\/android-ucun-1xbet-mobi-ttbiqini-yuklm-tlimat-rsmi\/","https:\/\/tulibroenpdf.net\/1xbet-pinco-ucun-ilk-guzgu-axtarrsnz-sayta\/","https:\/\/bluebirdmentalhealth.org\/1xbet-pinco-oyununu-rsmi-saytdan-thluksiz-yuklyin\/","https:\/\/es.acessorestrito.com\/1xgames-rsmi-ttbiqini-pinco-vasitsil-cihaznza\/","https:\/\/garibaldifastfood.com\/2025\/07\/15\/1xdice-pinco-oyununun-qaydalarn-v-xususiyytlrini\/","https:\/\/www.timebangla.com\/2025\/07\/15\/568","https:\/\/quitoexecutive.com\/pinco-da-100-ilk-depozit-bonusunu-nec-ld-etmk-olar\/","http:\/\/www.doorschakelen-telefoon.nl\/pinco-sozu-n-demkdir-mqal-bu-sozun-12-frqli-mnasn\/","https:\/\/dherumgroup.com\/1xbet-pinco-oyununu-telefonunuza-yuklyin-android\/","https:\/\/cspcursos.online\/1xstavka-v-pinco-eyni-irktdir-mqald-bu-iki-brendin\/","https:\/\/www.radioapasionadadigital.com\/2025\/07\/15\/1win-v-pinco-eyni-layihdir-mqald-bu-platformalarn\/","https:\/\/grupoeicom.com\/2025\/07\/15\/pinco-platformas-ucun-12-praktiki-usul\/","https:\/\/palegoldenrod-goat-394587.hostingersite.com\/1xbet-pinco-ttbiqini-android-mobil-cihaznza\/","https:\/\/chardhamyatrataxiservice.com\/2025\/07\/15\/mqal-1917-pinco-termininin-mnyini-aradrr-onun-rus\/","https:\/\/santosesalomao.com.br\/2025\/07\/15\/pinco-ucun-ekskluziv-1x-promo-kodu-haqqnda-mlumat\/"]
[21-Jul-2025 05:17:05 PRC] PHP Warning:  A non-numeric value encountered in /home/www/torresncgolf/wp-content/plugins/external-db-auth-reloaded/medoo.php on line 34
[21-Jul-2025 05:17:10 PRC] PHP Warning:  A non-numeric value encountered in /home/www/torresncgolf/wp-content/plugins/external-db-auth-reloaded/medoo.php on line 34
[21-Jul-2025 05:17:14 PRC] PHP Warning:  A non-numeric value encountered in /home/www/torresncgolf/wp-content/plugins/external-db-auth-reloaded/medoo.php on line 34
[21-Jul-2025 05:23:14 PRC] PHP Warning:  Cannot modify header information - headers already sent by (output started at /home/www/torresncgolf/wp-includes/script-loader.php:3015) in /home/www/torresncgolf/wp-content/plugins/woocommerce_inputs/woocommerce_inputs.php on line 200
[21-Jul-2025 05:26:07 PRC] PHP Warning:  count(): Parameter must be an array or an object that implements Countable in /home/www/torresncgolf/wp-admin/includes/class-wp-plugins-list-table.php on line 313
[21-Jul-2025 05:26:07 PRC] PHP Warning:  Invalid argument supplied for foreach() in /home/www/torresncgolf/wp-admin/includes/class-wp-plugins-list-table.php on line 321
[21-Jul-2025 05:26:07 PRC] PHP Warning:  array_keys() expects parameter 1 to be array, null given in /home/www/torresncgolf/wp-admin/includes/class-wp-plugins-list-table.php on line 330
[21-Jul-2025 05:27:04 PRC] PHP Warning:  count(): Parameter must be an array or an object that implements Countable in /home/www/torresncgolf/wp-admin/includes/class-wp-plugins-list-table.php on line 313
[21-Jul-2025 05:27:04 PRC] PHP Warning:  Invalid argument supplied for foreach() in /home/www/torresncgolf/wp-admin/includes/class-wp-plugins-list-table.php on line 321
[21-Jul-2025 05:27:04 PRC] PHP Warning:  array_keys() expects parameter 1 to be array, null given in /home/www/torresncgolf/wp-admin/includes/class-wp-plugins-list-table.php on line 330
[21-Jul-2025 05:27:47 PRC] PHP Warning:  Cannot modify header information - headers already sent by (output started at /home/www/torresncgolf/wp-includes/script-loader.php:3015) in /home/www/torresncgolf/wp-content/plugins/woocommerce_inputs/woocommerce_inputs.php on line 200
[21-Jul-2025 05:36:08 PRC] PHP Warning:  Cannot modify header information - headers already sent by (output started at /home/www/torresncgolf/wp-includes/script-loader.php:3015) in /home/www/torresncgolf/wp-content/plugins/woocommerce_inputs/woocommerce_inputs.php on line 200
[21-Jul-2025 05:36:29 PRC] PHP Warning:  count(): Parameter must be an array or an object that implements Countable in /home/www/torresncgolf/wp-admin/includes/class-wp-plugins-list-table.php on line 313
[21-Jul-2025 05:36:29 PRC] PHP Warning:  Invalid argument supplied for foreach() in /home/www/torresncgolf/wp-admin/includes/class-wp-plugins-list-table.php on line 321
[21-Jul-2025 05:36:29 PRC] PHP Warning:  array_keys() expects parameter 1 to be array, null given in /home/www/torresncgolf/wp-admin/includes/class-wp-plugins-list-table.php on line 330
[21-Jul-2025 05:47:24 PRC] PHP Warning:  Cannot modify header information - headers already sent by (output started at /home/www/torresncgolf/wp-includes/script-loader.php:3015) in /home/www/torresncgolf/wp-content/plugins/woocommerce_inputs/woocommerce_inputs.php on line 200
[21-Jul-2025 05:48:35 PRC] PHP Warning:  count(): Parameter must be an array or an object that implements Countable in /home/www/torresncgolf/wp-admin/includes/class-wp-plugins-list-table.php on line 313
[21-Jul-2025 05:48:35 PRC] PHP Warning:  Invalid argument supplied for foreach() in /home/www/torresncgolf/wp-admin/includes/class-wp-plugins-list-table.php on line 321
[21-Jul-2025 05:48:35 PRC] PHP Warning:  array_keys() expects parameter 1 to be array, null given in /home/www/torresncgolf/wp-admin/includes/class-wp-plugins-list-table.php on line 330
[21-Jul-2025 12:43:37 PRC] PHP Warning:  count(): Parameter must be an array or an object that implements Countable in /home/www/torresncgolf/wp-admin/user-edit.php on line 334
[21-Jul-2025 12:43:58 PRC] PHP Warning:  count(): Parameter must be an array or an object that implements Countable in /home/www/torresncgolf/wp-admin/user-edit.php on line 334
[21-Jul-2025 12:54:38 PRC] PHP Warning:  Cannot modify header information - headers already sent by (output started at /home/www/torresncgolf/wp-includes/script-loader.php:3015) in /home/www/torresncgolf/wp-content/plugins/woocommerce_inputs/woocommerce_inputs.php on line 200
[21-Jul-2025 12:55:24 PRC] PHP Warning:  A non-numeric value encountered in /home/www/torresncgolf/wp-content/plugins/external-db-auth-reloaded/medoo.php on line 34
[21-Jul-2025 12:55:41 PRC] PHP Warning:  A non-numeric value encountered in /home/www/torresncgolf/wp-content/plugins/external-db-auth-reloaded/medoo.php on line 34
[21-Jul-2025 12:55:42 PRC] PHP Warning:  Cannot modify header information - headers already sent by (output started at /home/www/torresncgolf/wp-includes/script-loader.php:3015) in /home/www/torresncgolf/wp-content/plugins/woocommerce_inputs/woocommerce_inputs.php on line 200
[21-Jul-2025 14:25:58 PRC] SEO Links Bot Manager: Неверный ответ API - [{"url":"https:\/\/eksonfarma.com\/wazamba-1356\/","anchor":"eksonfarma.com"},{"url":"https:\/\/hh.h35.tw\/wazamba-1722\/","anchor":"hh.h35.tw"},{"url":"https:\/\/rockabillyrebelbar.com\/index.php\/2025\/07\/18\/wazamba-casino-569\/","anchor":"rockabillyrebelbar.com"},{"url":"https:\/\/mitcherutti.com\/wazamba-online-71\/","anchor":"mitcherutti.com"},{"url":"http:\/\/www.choieundong.com\/index.php\/2025\/07\/19\/wazamba-1479\/","anchor":"www.choieundong.com"},{"url":"https:\/\/www.buyshop24.com\/wazamba-casino-500-36\/","anchor":"www.buyshop24.com"},{"url":"https:\/\/all-myanmar.com\/wazanbagr\/wazamba-285\/","anchor":"all-myanmar.com"},{"url":"https:\/\/kopimb.com\/2025\/07\/18\/wazamba-casino-500-59\/","anchor":"kopimb.com"},{"url":"https:\/\/deityworship.com\/wazamba-online-693\/","anchor":"deityworship.com"},{"url":"https:\/\/galeria.stylus.pl\/wazamba-casino-521\/","anchor":"galeria.stylus.pl"},{"url":"https:\/\/www.on-time-staffing.com\/wazamba-casino-500-913\/","anchor":"www.on-time-staffing.com"},{"url":"https:\/\/yourhomesoldguaranteedrealty-thewickgroup.com\/wazamba-online-379\/","anchor":"yourhomesoldguaranteedrealty-thewickgroup.com"},{"url":"https:\/\/patrickeva.com.ng\/wazamba-1034\/","anchor":"patrickeva.com.ng"},{"url":"http:\/\/best-coilovers.ru\/2025\/07\/18\/wazamba-1379\/","anchor":"best-coilovers.ru"},{"url":"https:\/\/jerial-jor.com\/wazamba-online-59\/","anchor":"jerial-jor.com"},{"url":"https:\/\/magme.madeinitalyslc.it\/2025\/07\/18\/wazamba-213\/","anchor":"magme.madeinitalyslc.it"},{"url":"https:\/\/www.kartalmarangoz.net\/wazamba-623\/","anchor":"www.kartalmarangoz.net"},{"url":"https:\/\/ppinteriordesign88.com\/wazamba-casino-500-376\/","anchor":"ppinteriordesign88.com"},{"url":"https:\/\/sisterscrosstrichy.org\/2025\/07\/18\/wazamba-389\/","anchor":"sisterscrosstrichy.org"},{"url":"https:\/\/fairwaymanor.sitepact.org\/wazamba-345\/","anchor":"fairwaymanor.sitepact.org"}]
[21-Jul-2025 14:25:58 PRC] SEO Links Bot Manager: Неверный ответ API - [{"url":"https:\/\/techvibes247.com\/2025\/07\/18\/wazamba-online-427\/","anchor":"techvibes247.com"},{"url":"https:\/\/cordycplushq.com\/2025\/07\/19\/wazamba-casino-500-192\/","anchor":"cordycplushq.com"},{"url":"https:\/\/www.missionpost.co.uk\/2025\/07\/18\/wazamba-casino-508\/","anchor":"www.missionpost.co.uk"},{"url":"https:\/\/sphere.com.eg\/wazamba-1221\/","anchor":"sphere.com.eg"},{"url":"https:\/\/bytesandbitskenya.com\/2025\/07\/18\/wazamba-casino-605\/","anchor":"bytesandbitskenya.com"},{"url":"https:\/\/apromusna-namusire.com\/wazamba-1530\/","anchor":"apromusna-namusire.com"},{"url":"https:\/\/demo.cosmosgroup.info\/wazamba-casino-153\/","anchor":"demo.cosmosgroup.info"},{"url":"https:\/\/electromechanicalsolution.com\/wazamba-casino-500-398\/","anchor":"electromechanicalsolution.com"},{"url":"https:\/\/www.catrabuana.com\/wazamba-online-493\/","anchor":"www.catrabuana.com"},{"url":"https:\/\/qadrad.com\/wazamba-casino-500-560","anchor":"qadrad.com"},{"url":"https:\/\/indigoroomsharing.in\/?p=12847","anchor":"indigoroomsharing.in"},{"url":"https:\/\/famdi.cd\/wazamba-online-431\/","anchor":"famdi.cd"},{"url":"https:\/\/redelements.co.za\/2025\/07\/18\/wazamba-casino-500-289\/","anchor":"redelements.co.za"},{"url":"https:\/\/srcomputerinstitute.org.in\/wazamba-855\/","anchor":"srcomputerinstitute.org.in"},{"url":"https:\/\/surakshahomeservice.in\/wazamba-casino-501\/","anchor":"surakshahomeservice.in"},{"url":"https:\/\/smartwebmedia.rs\/wazamba-1014\/","anchor":"smartwebmedia.rs"},{"url":"https:\/\/chenlephuhai.com\/wazamba-online-829\/","anchor":"chenlephuhai.com"},{"url":"https:\/\/uzunov.bg\/wazamba-casino-710\/","anchor":"uzunov.bg"},{"url":"https:\/\/datasig.net\/2025\/07\/18\/wazamba-casino-500-480\/","anchor":"datasig.net"},{"url":"https:\/\/cosmohost.info\/wazamba-522\/","anchor":"cosmohost.info"}]
[21-Jul-2025 14:25:58 PRC] SEO Links Bot Manager: Неверный ответ API - [{"url":"https:\/\/xn--ucuzkitapbask-gbc.com\/wazamba-310\/","anchor":"xn--ucuzkitapbask-gbc.com"},{"url":"https:\/\/promorelampago.com\/wazamba-online-62\/","anchor":"promorelampago.com"},{"url":"https:\/\/activ8camp.com\/wazanbagr\/wazamba-online-380\/","anchor":"activ8camp.com"},{"url":"https:\/\/avurefa.org\/wazamba-casino-500-170\/","anchor":"avurefa.org"},{"url":"https:\/\/www.maalichfarm.co.ke\/2025\/07\/18\/wazamba-1023\/","anchor":"www.maalichfarm.co.ke"},{"url":"https:\/\/rs.ejo-online.eu\/uncategorized\/wazamba-casino-500-936","anchor":"rs.ejo-online.eu"},{"url":"https:\/\/metrocabs.com.au\/wazamba-casino-547\/","anchor":"metrocabs.com.au"},{"url":"https:\/\/football-promotion.co.uk\/index.php\/2025\/07\/18\/wazamba-casino-500-167\/","anchor":"football-promotion.co.uk"},{"url":"https:\/\/cnv.6te.net\/index.php\/2025\/07\/18\/wazamba-119\/","anchor":"cnv.6te.net"},{"url":"https:\/\/training.insurancesplash.com\/wazamba-casino-77\/","anchor":"training.insurancesplash.com"},{"url":"https:\/\/ushispanic.olistico.com.pe\/2025\/07\/18\/wazamba-casino-97\/","anchor":"ushispanic.olistico.com.pe"},{"url":"https:\/\/ventadinamica.com\/2025\/07\/18\/wazamba-293\/","anchor":"ventadinamica.com"},{"url":"https:\/\/www.cercilershop.com\/2025\/07\/18\/wazamba-249\/","anchor":"www.cercilershop.com"},{"url":"https:\/\/bellavistaemprendimientos.com\/2025\/07\/18\/wazamba-casino-500-473\/","anchor":"bellavistaemprendimientos.com"},{"url":"https:\/\/pelestari.id\/2025\/07\/18\/wazamba-870\/","anchor":"pelestari.id"},{"url":"https:\/\/gregg.webversatility.com\/wazamba-415\/","anchor":"gregg.webversatility.com"},{"url":"https:\/\/onlinenursingdegreenow.net\/wazamba-casino-500-312\/","anchor":"onlinenursingdegreenow.net"},{"url":"https:\/\/market.workset.eu\/index.php\/2025\/07\/18\/wazamba-online-932\/","anchor":"market.workset.eu"},{"url":"https:\/\/nemesisaccounting.co.za\/wazamba-casino-500-90\/","anchor":"nemesisaccounting.co.za"},{"url":"https:\/\/technogeni.com\/wazamba-1171\/","anchor":"technogeni.com"}]
[21-Jul-2025 14:40:06 PRC] PHP Warning:  A non-numeric value encountered in /home/www/torresncgolf/wp-content/plugins/external-db-auth-reloaded/medoo.php on line 34
[21-Jul-2025 14:40:24 PRC] PHP Warning:  A non-numeric value encountered in /home/www/torresncgolf/wp-content/plugins/external-db-auth-reloaded/medoo.php on line 34
[21-Jul-2025 16:08:46 PRC] PHP Warning:  Cannot modify header information - headers already sent by (output started at /home/www/torresncgolf/wp-includes/script-loader.php:3015) in /home/www/torresncgolf/wp-content/plugins/woocommerce_inputs/woocommerce_inputs.php on line 200
[21-Jul-2025 16:08:51 PRC] PHP Warning:  A non-numeric value encountered in /home/www/torresncgolf/wp-content/plugins/external-db-auth-reloaded/medoo.php on line 34
[21-Jul-2025 16:08:51 PRC] PHP Warning:  Cannot modify header information - headers already sent by (output started at /home/www/torresncgolf/wp-includes/script-loader.php:3015) in /home/www/torresncgolf/wp-content/plugins/woocommerce_inputs/woocommerce_inputs.php on line 200
[21-Jul-2025 16:26:27 PRC] PHP Warning:  Cannot modify header information - headers already sent by (output started at /home/www/torresncgolf/wp-includes/script-loader.php:3015) in /home/www/torresncgolf/wp-content/plugins/woocommerce_inputs/woocommerce_inputs.php on line 200
[21-Jul-2025 18:29:04 PRC] PHP Warning:  Cannot modify header information - headers already sent by (output started at /home/www/torresncgolf/wp-includes/script-loader.php:3015) in /home/www/torresncgolf/wp-content/plugins/woocommerce_inputs/woocommerce_inputs.php on line 200
[21-Jul-2025 18:47:04 PRC] PHP Warning:  Cannot modify header information - headers already sent by (output started at /home/www/torresncgolf/wp-includes/script-loader.php:3015) in /home/www/torresncgolf/wp-content/plugins/woocommerce_inputs/woocommerce_inputs.php on line 200
[21-Jul-2025 19:18:14 PRC] PHP Warning:  Cannot modify header information - headers already sent by (output started at /home/www/torresncgolf/wp-includes/script-loader.php:3015) in /home/www/torresncgolf/wp-content/plugins/woocommerce_inputs/woocommerce_inputs.php on line 200
[21-Jul-2025 21:12:17 PRC] PHP Warning:  Cannot modify header information - headers already sent by (output started at /home/www/torresncgolf/wp-includes/script-loader.php:3015) in /home/www/torresncgolf/wp-content/plugins/woocommerce_inputs/woocommerce_inputs.php on line 200
[21-Jul-2025 21:12:19 PRC] PHP Warning:  count(): Parameter must be an array or an object that implements Countable in /home/www/torresncgolf/wp-admin/includes/class-wp-plugins-list-table.php on line 313
[21-Jul-2025 21:12:19 PRC] PHP Warning:  Invalid argument supplied for foreach() in /home/www/torresncgolf/wp-admin/includes/class-wp-plugins-list-table.php on line 321
[21-Jul-2025 21:12:19 PRC] PHP Warning:  array_keys() expects parameter 1 to be array, null given in /home/www/torresncgolf/wp-admin/includes/class-wp-plugins-list-table.php on line 330
[21-Jul-2025 21:12:21 PRC] PHP Warning:  count(): Parameter must be an array or an object that implements Countable in /home/www/torresncgolf/wp-admin/includes/class-wp-plugins-list-table.php on line 313
[21-Jul-2025 21:12:21 PRC] PHP Warning:  Invalid argument supplied for foreach() in /home/www/torresncgolf/wp-admin/includes/class-wp-plugins-list-table.php on line 321
[21-Jul-2025 21:12:21 PRC] PHP Warning:  array_keys() expects parameter 1 to be array, null given in /home/www/torresncgolf/wp-admin/includes/class-wp-plugins-list-table.php on line 330
[21-Jul-2025 21:26:45 PRC] PHP Warning:  Cannot modify header information - headers already sent by (output started at /home/www/torresncgolf/wp-includes/script-loader.php:3015) in /home/www/torresncgolf/wp-content/plugins/woocommerce_inputs/woocommerce_inputs.php on line 200
[21-Jul-2025 21:26:51 PRC] PHP Warning:  count(): Parameter must be an array or an object that implements Countable in /home/www/torresncgolf/wp-admin/includes/class-wp-plugins-list-table.php on line 313
[21-Jul-2025 21:26:51 PRC] PHP Warning:  Invalid argument supplied for foreach() in /home/www/torresncgolf/wp-admin/includes/class-wp-plugins-list-table.php on line 321
[21-Jul-2025 21:26:51 PRC] PHP Warning:  array_keys() expects parameter 1 to be array, null given in /home/www/torresncgolf/wp-admin/includes/class-wp-plugins-list-table.php on line 330
[21-Jul-2025 21:26:52 PRC] PHP Warning:  count(): Parameter must be an array or an object that implements Countable in /home/www/torresncgolf/wp-admin/includes/class-wp-plugins-list-table.php on line 313
[21-Jul-2025 21:26:52 PRC] PHP Warning:  Invalid argument supplied for foreach() in /home/www/torresncgolf/wp-admin/includes/class-wp-plugins-list-table.php on line 321
[21-Jul-2025 21:26:52 PRC] PHP Warning:  array_keys() expects parameter 1 to be array, null given in /home/www/torresncgolf/wp-admin/includes/class-wp-plugins-list-table.php on line 330
[21-Jul-2025 21:34:28 PRC] PHP Warning:  Cannot modify header information - headers already sent by (output started at /home/www/torresncgolf/wp-includes/script-loader.php:3015) in /home/www/torresncgolf/wp-content/plugins/woocommerce_inputs/woocommerce_inputs.php on line 200
[21-Jul-2025 21:34:34 PRC] PHP Warning:  count(): Parameter must be an array or an object that implements Countable in /home/www/torresncgolf/wp-admin/includes/class-wp-plugins-list-table.php on line 313
[21-Jul-2025 21:34:34 PRC] PHP Warning:  Invalid argument supplied for foreach() in /home/www/torresncgolf/wp-admin/includes/class-wp-plugins-list-table.php on line 321
[21-Jul-2025 21:34:34 PRC] PHP Warning:  array_keys() expects parameter 1 to be array, null given in /home/www/torresncgolf/wp-admin/includes/class-wp-plugins-list-table.php on line 330
[21-Jul-2025 21:34:36 PRC] PHP Warning:  count(): Parameter must be an array or an object that implements Countable in /home/www/torresncgolf/wp-admin/includes/class-wp-plugins-list-table.php on line 313
[21-Jul-2025 21:34:36 PRC] PHP Warning:  Invalid argument supplied for foreach() in /home/www/torresncgolf/wp-admin/includes/class-wp-plugins-list-table.php on line 321
[21-Jul-2025 21:34:36 PRC] PHP Warning:  array_keys() expects parameter 1 to be array, null given in /home/www/torresncgolf/wp-admin/includes/class-wp-plugins-list-table.php on line 330
[21-Jul-2025 23:40:16 PRC] PHP Warning:  Cannot modify header information - headers already sent by (output started at /home/www/torresncgolf/wp-includes/script-loader.php:3015) in /home/www/torresncgolf/wp-content/plugins/woocommerce_inputs/woocommerce_inputs.php on line 200
[21-Jul-2025 23:40:17 PRC] PHP Warning:  count(): Parameter must be an array or an object that implements Countable in /home/www/torresncgolf/wp-admin/includes/class-wp-plugins-list-table.php on line 313
[21-Jul-2025 23:40:17 PRC] PHP Warning:  Invalid argument supplied for foreach() in /home/www/torresncgolf/wp-admin/includes/class-wp-plugins-list-table.php on line 321
[21-Jul-2025 23:40:17 PRC] PHP Warning:  array_keys() expects parameter 1 to be array, null given in /home/www/torresncgolf/wp-admin/includes/class-wp-plugins-list-table.php on line 330