*/ class ServerInfo { /** * SERVER CPU LOAD * Get the server CPU load in percentage. */ public function get_server_cpu_load_percentage() { $result = -1; $lines = null; $os = ''; if ( defined( 'PHP_OS' ) ) { $os = PHP_OS; } // Linux server if ( $os == 'Linux' ) { $checks = []; foreach ( [ 0, 1 ] as $i ) { $cmd = '/proc/stat'; $lines = []; $fh = fopen( $cmd, 'r' ); if ($fh) { while ( $line = fgets( $fh ) ) { $lines[] = $line; } fclose( $fh ); } foreach ( $lines as $line ) { $ma = []; if ( ! preg_match( '/^cpu (\d+) (\d+) (\d+) (\d+) (\d+) (\d+) (\d+) (\d+) (\d+) (\d+)$/', $line, $ma ) ) { continue; } $total = $ma[1] + $ma[2] + $ma[3] + $ma[4] + $ma[5] + $ma[6] + $ma[7] + $ma[8] + $ma[9]; // $totalCpu = $ma[1] + $ma[2] + $ma[3]; // $result = (100 / $total) * $totalCpu; $ma['total'] = $total; $checks[] = $ma; break; } if ( $i == 0 ) { // Wait before checking again. sleep( 1 ); } } // Idle - prev idle $diffIdle = $checks[1][4] - $checks[0][4]; // Total - prev total $diffTotal = $checks[1]['total'] - $checks[0]['total']; // Usage in % $diffUsage = round( ( 1000 * ( $diffTotal - $diffIdle ) / $diffTotal + 5 ) / 10, 2 ); $result = $diffUsage; return (float) $result; } return 'N/A'; } /** * Convert Memory Size * * @param [type] $size * * @return void */ public function convert_memory_size( $size ) { $l = substr( $size, -1 ); $ret = substr( $size, 0, -1 ); switch ( strtoupper( $l ) ) { case 'P': $ret *= 1024; case 'T': $ret *= 1024; case 'G': $ret *= 1024; case 'M': $ret *= 1024; case 'K': $ret *= 1024; } return $ret; } /** * Get Server/WP Memory Limit */ public function get_wp_memory_limit() { $memory_limit = (int) @ini_get( 'memory_limit' ) . ' MB' . ' (' . (int) WP_MEMORY_LIMIT . ' MB)'; if ( @ini_get( 'memory_limit' ) == '-1' ) { $memory_limit = '-1 / ' . esc_html__( 'Unlimited', 'adminify' ) . ' (' . (int) WP_MEMORY_LIMIT . ' MB)'; } if ( (int) WP_MEMORY_LIMIT < (int) @ini_get( 'memory_limit' ) && WP_MEMORY_LIMIT != '-1' || (int) WP_MEMORY_LIMIT < (int) @ini_get( 'memory_limit' ) && @ini_get( 'memory_limit' ) != '-1' ) { $memory_limit .= ' ' . sprintf( __( 'The WP PHP Memory Limit is less than the %s Server PHP Memory Limit', 'adminify' ), (int) @ini_get( 'memory_limit' ) . ' MB' ) . '!'; } return $memory_limit; } /** * Get PHP Version */ public function get_php_version() { $php_version = 'N/A'; if ( function_exists( 'phpversion' ) ) { $php_version = phpversion(); } if ( defined( 'PHP_VERSION' ) ) { $php_version = PHP_VERSION; } if ( $php_version != 'N/A' && version_compare( $php_version, '7.3', '<' ) ) { $php_version = ' ' . sprintf( __( '%1$s - Recommend PHP version of 7.3. See: %2$s', 'adminify' ), esc_html( $php_version ), '' . __( 'WordPress Requirements', 'adminify' ) . '' ) . ''; } return $php_version; } /** * Get PHP Version Only * */ public function get_php_version_lite() { $php_version = 'N/A'; if ( function_exists( 'phpversion' ) ) { $php_version = phpversion(); } if ( defined( 'PHP_VERSION' ) ) { $php_version = PHP_VERSION; } return $php_version; } /** * Get Curl Version * * @return void */ public function get_cURL_version() { $curl_version = 'N/A'; if ( function_exists( 'curl_version' ) ) { $curl_version = curl_version(); $curl_version = $curl_version['version'] . ', ' . $curl_version['ssl_version']; } return $curl_version; } /** * Get MySQL Version * * @return void */ public function get_mysql_version() { global $wpdb; // Short Version // $db_version = $wpdb->db_server_info(); $db_version_dump = $wpdb->get_var( 'SELECT VERSION() AS version from DUAL' ); if ( preg_match( '/\d+(?:\.\d+)+/', $db_version_dump, $matches ) ) { $db_version = $matches[0]; // returning the first match } else { $db_version = __( 'N/A', 'adminify' ); } return $db_version; } /** * Get Get Database Software Name * * @return void */ public function get_db_software() { global $wpdb; $db_software_query = $wpdb->get_row( "SHOW VARIABLES LIKE 'version_comment'" ); $db_software_dump = $db_software_query->Value; if ( ! empty( $db_software_dump ) ) { $db_soft_array = explode( ' ', trim( $db_software_dump ) ); $db_software = $db_soft_array[0]; } else { $db_software = __( 'N/A', 'adminify' ); } return $db_software; } /** * Get WP Table Prefix */ public function get_table_prefix() { global $wpdb; $prefix = [ 'tablePrefix' => $wpdb->prefix, 'tableBasePrefix' => $wpdb->base_prefix, ]; return $prefix; } /** * Get WP Timezone */ public function get_wp_timezone() { $timezone = get_option( 'timezone_string' ); // Direct value // Create a UTC+- zone if no timezone string exists if ( empty( $timezone ) ) { // Current offset $current_offset = get_option( 'gmt_offset' ); // Plus offset $timezone = 'UTC+' . $current_offset; // No offset if ( 0 == $current_offset ) { $timezone = 'UTC+0'; // Negative offset } elseif ( $current_offset < 0 ) { $timezone = 'UTC' . $current_offset; } // Normalize $timezone = str_replace( [ '.25', '.5', '.75' ], [ ':15', ':30', ':45' ], $timezone ); } return $timezone; } /** * Get Server/WP Total RAM * * @return void */ public function get_server_total_ram() { $os = ''; if ( defined( 'PHP_OS' ) ) { $os = PHP_OS; } $result = 0; // Linux server if ( $os == 'Linux' ) { $fh = fopen( '/proc/meminfo', 'r' ); if ($fh) { while ( $line = fgets( $fh ) ) { $pieces = []; if ( preg_match( '/^MemTotal:\s+(\d+)\skB$/', $line, $pieces ) ) { $result = $pieces[1]; // KB to Bytes $result = round( $result / 1024 / 1024, 2 ); break; } } fclose( $fh ); return $result; } } return 'N/A'; } /** * Get Server/WP Free RAM */ public function get_server_free_ram() { $os = ''; if ( defined( 'PHP_OS' ) ) { $os = PHP_OS; } $result = 0; // Linux server if ( $os == 'Linux' ) { $fh = fopen( '/proc/meminfo', 'r' ); if ($fh) { while ( $line = fgets( $fh ) ) { $pieces = []; if ( preg_match( '/^MemFree:\s+(\d+)\skB$/', $line, $pieces ) ) { // KB to Bytes $result = round( $pieces[1] / 1024 / 1024, 2 ); break; } } fclose( $fh ); return $result; } } return 'N/A'; } /** * Get Server/WP RAM Details * * @return void */ public function get_server_ram_details() { $os = ''; if ( defined( 'PHP_OS' ) ) { $os = PHP_OS; } $ram_data = ''; if ( $os == 'Linux' ) { foreach ( file( '/proc/meminfo' ) as $ri ) { $m[ strtok( $ri, ':' ) ] = strtok( '' ); } $ram_total = round( (int) $m['MemTotal'] / 1024 / 1024, 2 ); $ram_available = round( (int) $m['MemAvailable'] / 1024 / 1024, 2 ); $ram_free = round( (int) $m['MemFree'] / 1024 / 1024, 2 ); $ram_buffers = round( (int) $m['Buffers'] / 1024 / 1024, 2 ); $ram_cached = round( (int) $m['Cached'] / 1024 / 1024, 2 ); $mem_kernel_app = round( ( 100 - ( $ram_buffers + $ram_cached + $ram_free ) / $ram_total * 100 ), 2 ); $mem_cached = round( $ram_cached / $ram_total * 100, 2 ); $mem_buffers = round( $ram_buffers / $ram_total * 100, 2 ); $ram_data = [ 'MemTotal' => $ram_total, 'MemAvailable' => $ram_available, 'MemFree' => $ram_free, 'Buffers' => $ram_buffers, 'Cached' => $ram_cached, 'MemUsagePercentage' => round( $mem_kernel_app + $mem_buffers + $mem_cached, 2 ), // Physical Memory ]; return $ram_data; } return 'N/A'; } /** * Get Real Server Memory Usage */ public function get_real_memory_usage() { $real_memory_usage = function_exists( 'memory_get_peak_usage' ) ? round( memory_get_peak_usage( true ) ) : 0; if ( $real_memory_usage ) { return $real_memory_usage; } return 'N/A'; } /** * WP Memory Usage */ public function get_wp_memory_usage() { // Get WP Memory Limit $get_memory_limit = WP_MEMORY_LIMIT; if ( (int) WP_MEMORY_LIMIT > (int) @ini_get( 'memory_limit' ) ) { // WP Limit can't be greater than Server Limiit $get_memory_limit = @ini_get( 'memory_limit' ); } $memory_limit_convert = $this->convert_memory_size( $get_memory_limit ); $memory_limit_format = size_format( $memory_limit_convert ); $memory_limit = $memory_limit_convert; // Get Real Memory Usage $get_memory_usage = $this->get_real_memory_usage(); $memory_usage_convert = round( $get_memory_usage / 1024 / 1024 ); $memory_usage_format = $memory_usage_convert . 'MB'; $memory_usage = $get_memory_usage; if ( $get_memory_usage != false && $get_memory_limit != false ) { // check memory limit is a numeric value if ( ! is_numeric( $memory_limit ) ) { $memory_limit = 999; } $wp_mem_data = [ 'MemLimit' => $memory_limit, 'MemLimitGet' => $get_memory_limit, 'MemLimitConvert' => $memory_limit_convert, 'MemLimitFormat' => $memory_limit_format, 'MemUsage' => $memory_usage, 'MemUsageGet' => $get_memory_usage, 'MemUsageConvert' => $memory_usage_convert, 'MemUsageFormat' => $memory_usage_format, 'MemUsageCalc' => round( $memory_usage / $memory_limit * 100, 0 ), ]; return $wp_mem_data; } return 'N/A'; } /** * Server Memory Usage */ public function get_server_memory_usage() { // Get Server Memory Limit $get_memory_limit = @ini_get( 'memory_limit' ); $memory_limit_convert = $this->convert_memory_size( $get_memory_limit ); $memory_limit_format = size_format( $memory_limit_convert ); $memory_limit = $memory_limit_convert; // Get Real Memory Usage $get_memory_usage = $this->get_real_memory_usage(); $memory_usage_convert = round( $get_memory_usage / 1024 / 1024 ); $memory_usage_format = $memory_usage_convert . ' MB'; $memory_usage = $get_memory_usage; if ( $get_memory_usage != false && $get_memory_limit != false ) { // check memory limit is a numeric value if ( ! is_numeric( $memory_limit ) ) { $memory_limit = 999; } $php_mem_data = [ 'MemLimit' => $memory_limit, 'MemLimitGet' => $get_memory_limit, 'MemLimitConvert' => $memory_limit_convert, 'MemLimitFormat' => $memory_limit_format, 'MemUsage' => $memory_usage, 'MemUsageGet' => $get_memory_usage, 'MemUsageConvert' => $memory_usage_convert, 'MemUsageFormat' => $memory_usage_format, 'MemUsageCalc' => round( $memory_usage / $memory_limit * 100, 0 ), ]; return $php_mem_data; } return 'N/A'; } public static function wp_memory_usage_percentage() { $memory_usage = ( new ServerInfo() )->get_wp_memory_usage(); $memory_usage_percentage = $memory_usage['MemUsageCalc']; return $memory_usage_percentage; } /** * Get Server Disk Size */ public function get_server_disk_size( $path = '/' ) { $os = ''; if ( defined( 'PHP_OS' ) ) { $os = PHP_OS; } // Linux server if ( $os == 'Linux' ) { $result = []; $result['size'] = 0; $result['free'] = 0; $result['used'] = 0; $lines = null; exec( sprintf( 'df /P %s', $path ), $lines ); foreach ( $lines as $index => $line ) { if ( $index != 1 ) { continue; } $values = preg_split( '/\s{1,}/', $line ); $result['size'] = round( $values[1] / 1024 / 1024, 2 ); $result['free'] = round( $values[3] / 1024 / 1024, 2 ); $result['used'] = round( $values[2] / 1024 / 1024, 2 ); $result['usage'] = round( $result['used'] / $result['size'] * 100, 2 ); break; } return $result; } return 'N/A'; } /** * CPU Load Average * * @return void */ public function get_cpu_load_average() { $load = 'N/A'; // Check via PHP function $avg = function_exists( 'sys_getloadavg' ) ? sys_getloadavg() : false; if ( ! empty( $avg ) && is_array( $avg ) && 3 == count( $avg ) ) { $load = implode( ', ', $avg ); } return $load; } /** * Get IP Address * * @return void */ public function get_ip_address() { // Get ip address $ip_address = isset( $_SERVER['SERVER_ADDR'] ) ? sanitize_text_field( wp_unslash( $_SERVER['SERVER_ADDR'] ) ) : ''; if ( ! $ip_address ) { $ip_address = isset( $_SERVER['LOCAL_ADDR'] ) ? sanitize_text_field( wp_unslash( $_SERVER['LOCAL_ADDR'] ) ) : ''; } return $ip_address; } /** * Get WordPress Version * * @return void */ public function get_wp_version() { global $wp_version; return $wp_version; } public function check_limit() { $memory_limit = ini_get( 'memory_limit' ); if ( preg_match( '/^(\d+)(.)$/', $memory_limit, $matches ) ) { if ( $matches[2] == 'G' ) { $memory_limit = $matches[1] . ' ' . 'GB'; // nnnG -> nnn GB } elseif ( $matches[2] == 'M' ) { $memory_limit = $matches[1] . ' ' . 'MB'; // nnnM -> nnn MB } elseif ( $matches[2] == 'K' ) { $memory_limit = $matches[1] . ' ' . 'KB'; // nnnK -> nnn KB } elseif ( $matches[2] == 'T' ) { $memory_limit = $matches[1] . ' ' . 'TB'; // nnnT -> nnn TB } elseif ( $matches[2] == 'P' ) { $memory_limit = $matches[1] . ' ' . 'PB'; // nnnP -> nnn PB } } return $memory_limit; } public function format_filesize( $bytes ) { if ( ( $bytes / pow( 1024, 5 ) ) > 1 ) { return number_format_i18n( ( $bytes / pow( 1024, 5 ) ), 0 ) . ' ' . __( 'PB', 'adminify' ); } elseif ( ( $bytes / pow( 1024, 4 ) ) > 1 ) { return number_format_i18n( ( $bytes / pow( 1024, 4 ) ), 0 ) . ' ' . __( 'TB', 'adminify' ); } elseif ( ( $bytes / pow( 1024, 3 ) ) > 1 ) { return number_format_i18n( ( $bytes / pow( 1024, 3 ) ), 0 ) . ' ' . __( 'GB', 'adminify' ); } elseif ( ( $bytes / pow( 1024, 2 ) ) > 1 ) { return number_format_i18n( ( $bytes / pow( 1024, 2 ) ), 0 ) . ' ' . __( 'MB', 'adminify' ); } elseif ( $bytes / 1024 > 1 ) { return number_format_i18n( $bytes / 1024, 0 ) . ' ' . __( 'KB', 'adminify' ); } elseif ( $bytes >= 0 ) { return number_format_i18n( $bytes, 0 ) . ' ' . __( 'bytes', 'adminify' ); } else { return __( 'Unknown', 'adminify' ); } } public function format_filesize_kB( $kiloBytes ) { if ( ( $kiloBytes / pow( 1024, 4 ) ) > 1 ) { return number_format_i18n( ( $kiloBytes / pow( 1024, 4 ) ), 0 ) . ' ' . __( 'PB', 'adminify' ); } elseif ( ( $kiloBytes / pow( 1024, 3 ) ) > 1 ) { return number_format_i18n( ( $kiloBytes / pow( 1024, 3 ) ), 0 ) . ' ' . __( 'TB', 'adminify' ); } elseif ( ( $kiloBytes / pow( 1024, 2 ) ) > 1 ) { return number_format_i18n( ( $kiloBytes / pow( 1024, 2 ) ), 0 ) . ' ' . __( 'GB', 'adminify' ); } elseif ( ( $kiloBytes / 1024 ) > 1 ) { return number_format_i18n( $kiloBytes / 1024, 0 ) . ' ' . __( 'MB', 'adminify' ); } elseif ( $kiloBytes >= 0 ) { return number_format_i18n( $kiloBytes / 1, 0 ) . ' ' . __( 'KB', 'adminify' ); } else { return __( 'Unknown', 'adminify' ); } } public function format_php_size( $size ) { if ( ! is_numeric( $size ) ) { if ( strpos( $size, 'M' ) !== false ) { $size = intval( $size ) * 1024 * 1024; } elseif ( strpos( $size, 'K' ) !== false ) { $size = intval( $size ) * 1024; } elseif ( strpos( $size, 'G' ) !== false ) { $size = intval( $size ) * 1024 * 1024 * 1024; } } return is_numeric( $size ) ? $this->format_filesize( $size ) : $size; } }