ecshop适应在PHP7的修改方法解决报错的实现
程序员文章站
2024-04-02 11:05:16
ecshop这个系统,到目前也没见怎么推出新版本,如果是新项目,不太建议使用它。不过,因为我一直以来都在使用中,所以不得不更改让其适应php新版本。现在php 7已经出发行...
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(); } if ($this->querycount++ <= 99) { $this->querylog[] = $sql; } if ($this->querytime == '') { if (php_version >= '5.0.0') { $this->querytime = microtime(true); } else { $this->querytime = microtime(); } } /* 当当前的时间大于类初始化时间的时候,自动执行 ping 这个自动重新连接操作 */ if (time() > $this->starttime + 1) { $this->link_id->ping(); } if (!($query = $this->link_id->query($sql)) && $type != 'silent') { $this->error_message[]['message'] = 'mysql query error'; $this->error_message[]['sql'] = $sql; $this->error_message[]['error'] = $this->link_id->error; $this->error_message[]['errno'] = $this->link_id->errno; $this->errormsg(); return false; } if (defined('debug_mode') && (debug_mode & 8) == 8) { $logfilename = $this->root_path . data_dir . '/mysql_query_' . $this->dbhash . '_' . date('y_m_d') . '.log'; $str = $sql . "\n\n"; if (php_version >= '5.0') { file_put_contents($logfilename, $str, file_append); } else { $fp = @fopen($logfilename, 'ab+'); if ($fp) { fwrite($fp, $str); fclose($fp); } } } return $query; } function affected_rows() { return $this->link_id->affected_rows; } function error() { return $this->link_id->error; } function errno() { return $this->link_id->errno; } function result($query, $row) { $query->data_seek($row); $result = $query->fetch_row(); $query->free(); return $result; } function num_rows($query) { return $query->num_rows; } function num_fields($query) { return $this->link_id->field_count; } function free_result($query) { return $query->free(); } function insert_id() { return $this->link_id->insert_id; } function fetchrow($query) { return $query->fetch_assoc(); } function fetch_fields($query) { return $query->fetch_field(); } function version() { return $this->version; } function ping() { return $this->link_id->ping(); } function escape_string($unescaped_string) { return $this->link_id->real_escape_string($unescaped_string); } function close() { return $this->link_id->close(); } function errormsg($message = '', $sql = '') { if ($message) { echo "<b>dtxb info</b>: $message\n\n<br /><br />"; //print('<a href="http://faq.comsenz.com/?type=mysql&dberrno=2003&dberror=can%27t%20connect%20to%20mysql%20server%20on" target="_blank">http://faq.comsenz.com/</a>'); } else { echo "<b>mysql server error report:"; print_r($this->error_message); //echo "<br /><br /><a href='http://faq.comsenz.com/?type=mysql&dberrno=" . $this->error_message[3]['errno'] . "&dberror=" . urlencode($this->error_message[2]['error']) . "' target='_blank'>http://faq.comsenz.com/</a>"; } exit; } /* 仿真 adodb 函数 */ function selectlimit($sql, $num, $start = 0) { if ($start == 0) { $sql .= ' limit ' . $num; } else { $sql .= ' limit ' . $start . ', ' . $num; } return $this->query($sql); } function getone($sql, $limited = false) { if ($limited == true) { $sql = trim($sql . ' limit 1'); } $res = $this->query($sql); if ($res !== false) { $row = $res->fetch_row(); $res->free(); if ($row !== false) { return $row[0]; } else { return ''; } } else { return false; } } function getonecached($sql, $cached = 'filefirst') { $sql = trim($sql . ' limit 1'); $cachefirst = ($cached == 'filefirst' || ($cached == 'mysqlfirst' && $this->platform != 'windows')) && $this->max_cache_time; if (!$cachefirst) { return $this->getone($sql, true); } else { $result = $this->getsqlcachedata($sql, $cached); if (empty($result['storecache']) == true) { return $result['data']; } } $arr = $this->getone($sql, true); if ($arr !== false && $cachefirst) { $this->setsqlcachedata($result, $arr); } return $arr; } function getall($sql) { $res = $this->query($sql); if ($res !== false) { $arr = $res->fetch_all(mysqli_assoc); $res->free(); return $arr; } else { return false; } } function getallcached($sql, $cached = 'filefirst') { $cachefirst = ($cached == 'filefirst' || ($cached == 'mysqlfirst' && $this->platform != 'windows')) && $this->max_cache_time; if (!$cachefirst) { return $this->getall($sql); } else { $result = $this->getsqlcachedata
以上就是小编为大家带来的ecshop适应在php7的修改方法解决报错的实现全部内容了,希望大家多多支持~