OwlCyberSecurity - MANAGER
Edit File: class-wpvivid-db-method.php
<?php class WPvivid_DB_Method { public $db_handle; public $type; public function connect_db() { $common_setting = WPvivid_Setting::get_setting(false, 'wpvivid_common_setting'); $db_connect_method = isset($common_setting['options']['wpvivid_common_setting']['db_connect_method']) ? $common_setting['options']['wpvivid_common_setting']['db_connect_method'] : 'wpdb'; if($db_connect_method === 'wpdb'){ global $wpdb; $this->db_handle=$wpdb; $this->type='wpdb'; return array('result'=>WPVIVID_SUCCESS); } else{ if(class_exists('PDO')) { $extensions=get_loaded_extensions(); if(array_search('pdo_mysql',$extensions)) { $res = explode(':',DB_HOST); $db_host = $res[0]; $db_port = empty($res[1])?'':$res[1]; if(!empty($db_port)) { $dsn='mysql:host=' . $db_host . ';port=' . $db_port . ';dbname=' . DB_NAME; } else{ $dsn='mysql:host=' . $db_host . ';dbname=' . DB_NAME; } $this->db_handle=new PDO($dsn, DB_USER, DB_PASSWORD); $this->type='pdo_mysql'; return array('result'=>WPVIVID_SUCCESS); } else{ return array('result'=>WPVIVID_FAILED, 'error'=>'The pdo_mysql extension is not detected. Please install the extension first or choose wpdb option for Database connection method.'); } } else{ return array('result'=>WPVIVID_FAILED, 'error'=>'The pdo_mysql extension is not detected. Please install the extension first or choose wpdb option for Database connection method.'); } } } public function check_db($fcgi) { $ret=$this->connect_db(); if($ret['result']==WPVIVID_FAILED) { return $ret; } if($this->type=='pdo_mysql') { return $this->check_db_pdo($fcgi); } else if($this->type=='wpdb') { return $this->check_db_wpdb($fcgi); } return array('result' => WPVIVID_FAILED,'error' => 'db handle type not found.'); } public function check_db_pdo($fcgi) { $ret['alert_db']=false; $ret['result']=WPVIVID_SUCCESS; $ret['big_tables']=array(); $db_info=array(); $sth = $this->db_handle->query('SHOW TABLE STATUS'); $dbSize = 0; $sum_rows=0; $rows = $sth->fetchAll(); foreach ($rows as $row) { global $wpdb; if (is_multisite() && !defined('MULTISITE')) { $prefix = $wpdb->base_prefix; } else { $prefix = $wpdb->get_blog_prefix(0); } if(preg_match('/^(?!'.$prefix.')/', $row["Name"]) == 1){ continue; } $db_info[$row["Name"]]["Rows"]=$row["Rows"]; $db_info[$row["Name"]]["Data_length"]=size_format($row["Data_length"]+$row["Index_length"],2); if($row["Rows"]>1000000) { $ret['big_tables'][$row["Name"]]['Rows']=$row["Rows"]; $ret['big_tables'][$row["Name"]]['Data_length']=size_format($row["Data_length"]+$row["Index_length"],2); } $sum_rows+=$row["Rows"]; $dbSize+=$row["Data_length"]+$row["Index_length"]; } if($fcgi) { $alter_sum_rows=4000000; } else { $alter_sum_rows=4000000*3; } $memory_limit = ini_get('memory_limit'); $ret['memory_limit']=$memory_limit; $memory_limit = trim($memory_limit); $memory_limit_int = (int) $memory_limit; $last = strtolower(substr($memory_limit, -1)); if($last == 'g') $memory_limit_int = $memory_limit_int*1024*1024*1024; if($last == 'm') $memory_limit_int = $memory_limit_int*1024*1024; if($last == 'k') $memory_limit_int = $memory_limit_int*1024; if($dbSize>($memory_limit_int*0.9)) { $max_rows=0; } else { $max_rows=(($memory_limit_int*0.9)-$dbSize)/49; } $max_rows=max($max_rows,1048576); if($sum_rows>$alter_sum_rows||$sum_rows>$max_rows) { //big db alert $ret['alert_db']=true; $ret['sum_rows']=$sum_rows; $ret['db_size']=size_format($dbSize,2); if($fcgi) $ret['alter_fcgi']=true; } $ret['db_size']=size_format($dbSize,2); return $ret; } public function check_db_wpdb($fcgi) { $ret['alert_db']=false; $ret['result']=WPVIVID_SUCCESS; $ret['big_tables']=array(); $db_info=array(); global $wpdb; $result=$wpdb->get_results('SHOW TABLE STATUS',ARRAY_A); //$sth = $this->db_handle->query('SHOW TABLE STATUS'); $dbSize = 0; $sum_rows=0; //$rows = $sth->fetchAll(); foreach ($result as $row) { global $wpdb; if (is_multisite() && !defined('MULTISITE')) { $prefix = $wpdb->base_prefix; } else { $prefix = $wpdb->get_blog_prefix(0); } if(preg_match('/^(?!'.$prefix.')/', $row["Name"]) == 1){ continue; } $db_info[$row["Name"]]["Rows"]=$row["Rows"]; $db_info[$row["Name"]]["Data_length"]=size_format($row["Data_length"]+$row["Index_length"],2); if($row["Rows"]>1000000) { $ret['big_tables'][$row["Name"]]['Rows']=$row["Rows"]; $ret['big_tables'][$row["Name"]]['Data_length']=size_format($row["Data_length"]+$row["Index_length"],2); } $sum_rows+=$row["Rows"]; $dbSize+=$row["Data_length"]+$row["Index_length"]; } if($fcgi) { $alter_sum_rows=4000000; } else { $alter_sum_rows=4000000*3; } $memory_limit = ini_get('memory_limit'); $ret['memory_limit']=$memory_limit; $memory_limit = trim($memory_limit); $memory_limit_int = (int) $memory_limit; $last = strtolower(substr($memory_limit, -1)); if($last == 'g') $memory_limit_int = $memory_limit_int*1024*1024*1024; if($last == 'm') $memory_limit_int = $memory_limit_int*1024*1024; if($last == 'k') $memory_limit_int = $memory_limit_int*1024; if($dbSize>($memory_limit_int*0.9)) { $max_rows=0; } else { $max_rows=(($memory_limit_int*0.9)-$dbSize)/49; } $max_rows=max($max_rows,1048576); if($sum_rows>$alter_sum_rows||$sum_rows>$max_rows) { //big db alert $ret['alert_db']=true; $ret['sum_rows']=$sum_rows; $ret['db_size']=size_format($dbSize,2); if($fcgi) $ret['alter_fcgi']=true; } $ret['db_size']=size_format($dbSize,2); return $ret; } public function get_sql_mode() { try { $ret['result'] = WPVIVID_SUCCESS; $ret['mysql_mode'] = ''; global $wpdb; $result = $wpdb->get_results('SELECT @@SESSION.sql_mode', ARRAY_A); foreach ($result as $row) { $ret['mysql_mode'] = $row["@@SESSION.sql_mode"]; } } catch (Exception $error) { $message = 'An exception has occurred. class: '.get_class($error).';msg: '.$error->getMessage().';code: '.$error->getCode().';line: '.$error->getLine().';in_file: '.$error->getFile().';'; error_log($message); return array('result'=>'failed','error'=>$message); } return $ret; } public function get_mysql_version() { global $wpdb; $mysql_version = $wpdb->db_version(); return $mysql_version; } public function check_max_allowed_packet() { global $wpvivid_plugin,$wpdb; $max_allowed_packet = (int) $wpdb->get_var("SELECT @@session.max_allowed_packet"); if($max_allowed_packet<1048576) { $wpvivid_plugin->wpvivid_log->WriteLog('warning: max_allowed_packet less than 1M :'.size_format($max_allowed_packet,2),'notice'); } else if($max_allowed_packet<33554432) { $wpvivid_plugin->wpvivid_log->WriteLog('max_allowed_packet less than 32M :'.size_format($max_allowed_packet,2),'notice'); } } }