ecshop适应在PHP7的修改方法解决报错的实现

  • 格式:pdf
  • 大小:76.80 KB
  • 文档页数:5

ecshop适应在PHP7的修改⽅法解决报错的实现

ecshop这个系统,到⽬前也没见怎么推出新版本,如果是新项⽬,不太建议使⽤它。不过,因为我⼀直以来都在使⽤中,所以不得不更改让其适应PHP新版本。现在PHP 7已经出发

⾏版了,所以更改来继续使⽤吧。具体的更改有以下⽅⾯:

(1)将mysql扩展的使⽤替换掉,改为使⽤mysqli或pdo:

从php5.5开始,mysql扩展将废弃了。

具体更改的⽂件在于includes/cls_mysql.php。这是个不⼩的⼯程,⽂件代码太长……

if (!defined('DITAN_ECS'))

{

die('Hacking attempt');

}

class cls_mysql

{

var $link_id = NULL;

var $settings = array();

var $queryCount = 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;

// 事务指令数

protected $transTimes = 0;

var $mysql_config_cache_file_time = 0;

var $mysql_disable_cache_tables = array(); // 不允许被缓存的表,遇到将不会进⾏缓存

function __construct($dbhost, $dbuser, $dbpw, $dbname = '', $charset = 'gbk', $pconnect = 0, $quiet = 0)

{

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

}

function cls_mysql($dbhost, $dbuser, $dbpw, $dbname = '', $charset = 'gbk', $pconnect = 0, $quiet = 0)

{

if (defined('EC_CHARSET'))

{

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

}

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

{

$this->root_path = ROOT_PATH;

}

if ($quiet)

{

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

}

else

{

$this->settings = array(

'dbhost' => $dbhost,

'dbuser' => $dbuser,

'dbpw' => $dbpw,

'dbname' => $dbname,

'charset' => $charset,

'pconnect' => $pconnect

);

}

}

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

{

if ($pconnect)

{

$this->link_id = new mysqli('p:'.$dbhost, $dbuser, $dbpw);

if ($this->link_id->connect_error)

{

if (!$quiet)

{

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

}

return false;

}

}

else

{

$this->link_id = new mysqli($dbhost, $dbuser, $dbpw);

if ($this->link_id->connect_error)

{

if (!$quiet)

{

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

}

return false;

}

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

$this->version = $this->link_id->server_version;

/* 对字符集进⾏初始化 */

$this->link_id->set_charset($charset);

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

$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 = $this->link_id->query("SHOW VARIABLES LIKE 'basedir'");

$row = $result->fetch_array(MYSQLI_ASSOC);

$result->free();

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') ||

date_default_timezone_get() == 'UTC')

{

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

$row = $result->fetch_array(MYSQLI_ASSOC);

$result->free();

if ($dbhost != '.' && strtolower($dbhost) != 'localhost:3306' && $dbhost != '127.0.0.1:3306')

{

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

}

if (date_default_timezone_get() == 'UTC')

{

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

}

}

$content = '<' . "?php\r\n" .

'$this->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 ($this->link_id->select_db($dbname) === false )

{

if (!$quiet)

{

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

}

return false;

}

else

{

return true;

}

}

else

{

return true;

}

}

function select_database($dbname)

{

return $this->link_id->select_db($dbname);

}

function set_mysql_charset($charset)

{

if (in_array(strtolower($charset), array('gbk', 'big5', 'utf-8', 'utf8')))

{

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

}

$this->link_id->set_charset($charset);

}

function fetch_array($query, $result_type = MYSQLI_ASSOC)

{

$row = $query->fetch_array($result_type);

$query->free();

return $row;

}

function query($sql, $type = '')

{

if ($this->link_id === NULL)

{

$this->connect($this->settings['dbhost'], $this->settings['dbuser'], $this->settings['dbpw'], $this->settings['dbname'], $this->settings['charset'], $this->settings['pconnect']);

$this->settings = array();