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
" ."$this->mysql_config_cache_file_time = " . $this->starttime . ";
" ."$this->timeline = " . $this->timeline . ";
" ."$this->timezone = " . $this->timezone . ";
" ."$this->platform = " . """ . $this->platform . "";
?" . ">";@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 . "
";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
<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的修改方法解决报错的实现全部内容了,希望大家多多支持脚本之家~