ecshop+mysql+配置文件_ecshop改造读写分离配置与改造

{

die('Hacking attempt');

}classcls_mysql

{var $link_id =NULL;var $settings =array();var $queryCount = 0;var $linkCount = 0;var $queryTime = '';var $queryLog =array();var $max_cache_time = 300; //最大的缓存时间,以秒为单位

var $cache_data_dir = 'temp/query_caches/';var $root_path = '';var $error_message =array();var $platform = '';var $version = '';var $dbhash = '';var $starttime = 0;var $timeline = 0;var $timezone = 0;var $mysql_config_cache_file_time = 0;var $mysql_disable_cache_tables = array(); //不允许被缓存的表,遇到将不会进行缓存

var $config =array();

function __construct($config, $charset= 'utf8', $pconnect = 0, $quiet = 0)

{

$this->cls_mysql($config, $charset, $pconnect, $quiet);

}

function cls_mysql($config, $charset= 'utf8', $pconnect = 0, $quiet = 0)

{if(!empty($config)) {

$config['charset'] =$charset;

$config['pconnect'] =$pconnect;

$this->config =$config;

}if (defined('EC_CHARSET'))

{

$charset= strtolower(str_replace('-', '', EC_CHARSET));

}if (defined('ROOT_PATH') && !$this->root_path)

{

$this->root_path =ROOT_PATH;

}

$this->set_config($this->config);if($quiet)

{

$dbhost= $this->settings['dbhost'];

$dbuser= $this->settings['dbuser'];

$dbpw= $this->settings['dbpw'];

$dbname= $this->settings['dbname'];

$this->connect($dbhost, $dbuser, $dbpw, $dbname, $charset, $pconnect, $quiet);

}

}//随机分配数据库连接

function set_config($config) {

$sid= array_rand($config['master']);

$settings= $config['master'][$sid];

$settings['sid'] =$sid;

$settings['charset'] = $this->config['charset'];

$settings['pconnect'] = $this->config['pconnect'];

$this->settings =$settings;

}

function connect($dbhost, $dbuser, $dbpw, $dbname= '', $charset = 'utf8', $pconnect = 0, $quiet = 0)

{if($pconnect)

{if (!($this->link_id =@mysql_pconnect($dbhost, $dbuser, $dbpw)))

{if (!$quiet)

{

$this->ErrorMsg("Can't pConnect MySQL Server!");

}return false;

}

}else{if (PHP_VERSION >= '4.2')

{

$this->link_id = @mysql_connect($dbhost, $dbuser, $dbpw, true);

}else{

$this->link_id =@mysql_connect($dbhost, $dbuser, $dbpw);

mt_srand((double)microtime() * 1000000); //对 PHP 4.2 以下的版本进行随机数函数的初始化工作

}if (!$this->link_id)

{if (!$quiet)

{//连接超过10次,中断连接,抛出错误

if($this->linkCount>9){

$this->ErrorMsg("Can't Connect MySQL Server!");

}

$this->linkCount++;

$this->del_error_link();

}return false;

}

}

$this->dbhash = md5($this->root_path . $dbhost . $dbuser . $dbpw . $dbname);

$this->version = mysql_get_server_info($this->link_id);/*如果mysql 版本是 4.1+ 以上,需要对字符集进行初始化*/

if ($this->version > '4.1')

{if ($charset != 'latin1')

{

mysql_query("SET character_set_connection=$charset, character_set_results=$charset, character_set_client=binary", $this->link_id);

}if ($this->version > '5.0.1')

{

mysql_query("SET sql_mode=''", $this->link_id);

}

}

$sqlcache_config_file= $this->root_path . $this->cache_data_dir . 'sqlcache_config_file_' . $this->dbhash . '.php';

@include($sqlcache_config_file);

$this->starttime =time();if ($this->max_cache_time && $this->starttime > $this->mysql_config_cache_file_time + $this->max_cache_time)

{if ($dbhost != '.')

{

$result= mysql_query("SHOW VARIABLES LIKE 'basedir'", $this->link_id);

$row=mysql_fetch_assoc($result);if (!empty($row['Value']{1}) && $row['Value']{1} == ':' && !empty($row['Value']{2}) && $row['Value']{2} == "\\")

{

$this->platform = 'WINDOWS';

}else{

$this->platform = 'OTHER';

}

}else{

$this->platform = 'WINDOWS';

}if ($this->platform == 'OTHER' &&($dbhost!= '.' && strtolower($dbhost) != 'localhost:3306' && $dbhost != '127.0.0.1:3306') ||(PHP_VERSION>= '5.1' && date_default_timezone_get() == 'UTC'))

{

$result= mysql_query("SELECT UNIX_TIMESTAMP() AS timeline, UNIX_TIMESTAMP('" . date('Y-m-d H:i:s', $this->starttime) . "') AS timezone", $this->link_id);

$row=mysql_fetch_assoc($result);if ($dbhost != '.' && strtolower($dbhost) != 'localhost:3306' && $dbhost != '127.0.0.1:3306')

{

$this->timeline = $this->starttime - $row['timeline'];

}if (PHP_VERSION >= '5.1' && date_default_timezone_get() == 'UTC')

{

$this->timezone = $this->starttime - $row['timezone'];

}

}

$content= 'mysql_config_cache_file_time =' . $this->starttime . ";\r\n".'$this->timeline =' . $this->timeline . ";\r\n".'$this->timezone =' . $this->timezone . ";\r\n".'$this->platform =' . "'" . $this->platform . "';\r\n?" . '>';

@file_put_contents($sqlcache_config_file, $content);

}/*选择数据库*/

if($dbname)

{if (mysql_select_db($dbname, $this->link_id) === false)

{if (!$quiet)

{

$this->ErrorMsg("Can't select MySQL database!");

}return false;

}else{return true;

}

}else{return true;

}

}

....../*删除失败连接*/function del_error_link(){

unset($this->config['master'][$this->settings['sid']]);

$this->set_config($this->config);

$dbhost= $this->settings['dbhost'];

$dbuser= $this->settings['dbuser'];

$dbpw= $this->settings['dbpw'];

$dbname= $this->settings['dbname'];

$this->connect($dbhost, $dbuser, $dbpw, $dbname);

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值