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

2018-09-21 10:07

阅读:297

  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(Cant 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(Cant 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(Cant 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=仿真 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的修改方法解决报错的实现全部内容了,希望大家多多支持脚本之家~


评论


亲,登录后才可以留言!