ecshop适应在php7,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 = "

" .

"$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 "DTXB info: $message


";

//print("http://faq.comsenz.com/");

}

else

{

echo "MySQL server error report:";

print_r($this->error_message);

//echo "error_message[3]["errno"] . "&dberror=" . urlencode($this->error_message[2]["error"]) . "" target="_blank">http://faq.comsenz.com/";

}

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的修改方法解决报错的实现全部内容了,希望大家多多支持网页设计~

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值