Heim CMS-Tutorial ECShop So ändern und unterstützen Sie PHP7 in Ecshop

So ändern und unterstützen Sie PHP7 in Ecshop

Jul 11, 2020 am 09:54 AM
ecshop

ecshop修改php的方法:首先将mysql扩展的使用替换掉,改为使用mysqli或pdo;然后更改“cls_image.php”的“gd_version()”方法,将这个方法改为静态方法;最后去除使用类名的构造函数。

So ändern und unterstützen Sie PHP7 in Ecshop

ecshop支持PHP7的修改方法

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

推荐:《ECShop教程

从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 = &#39;<&#39; . "?php\r\n" .
&#39;$this->mysql_config_cache_file_time = &#39; . $this->starttime . ";\r\n" .
&#39;$this->timeline = &#39; . $this->timeline . ";\r\n" .
&#39;$this->timezone = &#39; . $this->timezone . ";\r\n" .
&#39;$this->platform = &#39; . "&#39;" . $this->platform . "&#39;;\r\n?" . &#39;>&#39;;
@file_put_contents($sqlcache_config_file, $content);
}
/* 选择数据库 */
if ($dbname)
{
if ($this->link_id->select_db($dbname) === false )
{
if (!$quiet)
{
$this->ErrorMsg("Can&#39;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(&#39;gbk&#39;, &#39;big5&#39;, &#39;utf-8&#39;, &#39;utf8&#39;)))
{
$charset = str_replace(&#39;-&#39;, &#39;&#39;, $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 = &#39;&#39;)
{
if ($this->link_id === NULL)
{
$this->connect($this->settings[&#39;dbhost&#39;], $this->settings[&#39;dbuser&#39;], $this->settings[&#39;dbpw&#39;], $this->settings[&#39;dbname&#39;], $this->settings[&#39;charset&#39;], $this->settings[&#39;pconnect&#39;]);
$this->settings = array();
}
if ($this->queryCount++ <= 99)
{
$this->queryLog[] = $sql;
}
if ($this->queryTime == &#39;&#39;)
{
if (PHP_VERSION >= &#39;5.0.0&#39;)
{
$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 != &#39;SILENT&#39;)
{
$this->error_message[][&#39;message&#39;] = &#39;MySQL Query Error&#39;;
$this->error_message[][&#39;sql&#39;] = $sql;
$this->error_message[][&#39;error&#39;] = $this->link_id->error;
$this->error_message[][&#39;errno&#39;] = $this->link_id->errno;
$this->ErrorMsg();
return false;
}
if (defined(&#39;DEBUG_MODE&#39;) && (DEBUG_MODE & 8) == 8)
{
$logfilename = $this->root_path . DATA_DIR . &#39;/mysql_query_&#39; . $this->dbhash . &#39;_&#39; . date(&#39;Y_m_d&#39;) . &#39;.log&#39;;
$str = $sql . "\n\n";
if (PHP_VERSION >= &#39;5.0&#39;)
{
file_put_contents($logfilename, $str, FILE_APPEND);
}
else
{
$fp = @fopen($logfilename, &#39;ab+&#39;);
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 = &#39;&#39;, $sql = &#39;&#39;)
{
if ($message)
{
echo "DTXB info: $message\n\n
";
//print(&#39;http://faq.comsenz.com/&#39;);
}
else
{
echo "MySQL server error report:";
print_r($this->error_message);
//echo "
http://faq.comsenz.com/";
}
exit;
}
/* 仿真 Adodb 函数 */
function selectLimit($sql, $num, $start = 0)
{
if ($start == 0)
{
$sql .= &#39; LIMIT &#39; . $num;
}
else
{
$sql .= &#39; LIMIT &#39; . $start . &#39;, &#39; . $num;
}
return $this->query($sql);
}
function getOne($sql, $limited = false)
{
if ($limited == true)
{
$sql = trim($sql . &#39; LIMIT 1&#39;);
}
$res = $this->query($sql);
if ($res !== false)
{
$row = $res->fetch_row();
$res->free();
if ($row !== false)
{
return $row[0];
}
else
{
return &#39;&#39;;
}
}
else
{
return false;
}
}
function getOneCached($sql, $cached = &#39;FILEFIRST&#39;)
{
$sql = trim($sql . &#39; LIMIT 1&#39;);
$cachefirst = ($cached == &#39;FILEFIRST&#39; || ($cached == &#39;MYSQLFIRST&#39; && $this->platform != &#39;WINDOWS&#39;)) && $this->max_cache_time;
if (!$cachefirst)
{
return $this->getOne($sql, true);
}
else
{
$result = $this->getSqlCacheData($sql, $cached);
if (empty($result[&#39;storecache&#39;]) == true)
{
return $result[&#39;data&#39;];
}
}
$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 = &#39;FILEFIRST&#39;)
{
$cachefirst = ($cached == &#39;FILEFIRST&#39; || ($cached == &#39;MYSQLFIRST&#39; && $this->platform != &#39;WINDOWS&#39;)) && $this->max_cache_time;
if (!$cachefirst)
{
return $this->getAll($sql);
}
else
{
$result = $this->getSqlCacheData($sql, $cached);
if (empty($result[&#39;storecache&#39;]) == true)
{
return $result[&#39;data&#39;];
}
}
$arr = $this->getAll($sql);
if ($arr !== false && $cachefirst)
{
$this->setSqlCacheData($result, $arr);
}
return $arr;
}
function getRow($sql, $limited = false)
{
if ($limited == true)
{
$sql = trim($sql . &#39; LIMIT 1&#39;);
}
$res = $this->query($sql);
if ($res !== false)
{
$result = $res->fetch_assoc();
$res->free();
return $result;
}
else
{
return false;
}
}
function getRowCached($sql, $cached = &#39;FILEFIRST&#39;)
{
$cachefirst = ($cached == &#39;FILEFIRST&#39; || ($cached == &#39;MYSQLFIRST&#39; && $this->platform != &#39;WINDOWS&#39;)) && $this->max_cache_time;
if (!$cachefirst)
{
return $this->getRow($sql, true);
}
else
{
$result = $this->getSqlCacheData($sql, $cached);
if (empty($result[&#39;storecache&#39;]) == true)
{
return $result[&#39;data&#39;];
}
}
$arr = $this->getRow($sql, true);
if ($arr !== false && $cachefirst)
{
$this->setSqlCacheData($result, $arr);
}
return $arr;
}
function getCol($sql)
{
$res = $this->query($sql);
if ($res !== false)
{
$arr = array();
while ($row = $res->fetch_row())
{
$arr[] = $row[0];
}
$res->free();
return $arr;
}
else
{
return false;
}
}
function getColCached($sql, $cached = &#39;FILEFIRST&#39;)
{
$cachefirst = ($cached == &#39;FILEFIRST&#39; || ($cached == &#39;MYSQLFIRST&#39; && $this->platform != &#39;WINDOWS&#39;)) && $this->max_cache_time;
if (!$cachefirst)
{
return $this->getCol($sql);
}
else
{
$result = $this->getSqlCacheData($sql, $cached);
if (empty($result[&#39;storecache&#39;]) == true)
{
return $result[&#39;data&#39;];
}
}
$arr = $this->getCol($sql);
if ($arr !== false && $cachefirst)
{
$this->setSqlCacheData($result, $arr);
}
return $arr;
}
function autoExecute($table, $field_values, $mode = &#39;INSERT&#39;, $where = &#39;&#39;, $querymode = &#39;&#39;)
{
$field_names = $this->getCol(&#39;DESC &#39; . $table);
$sql = &#39;&#39;;
if ($mode == &#39;INSERT&#39;)
{
$fields = $values = array();
foreach ($field_names AS $value)
{
if (array_key_exists($value, $field_values) == true)
{
$fields[] = $value;
$values[] = "&#39;" . $field_values[$value] . "&#39;";
}
}
if (!empty($fields))
{
$sql = &#39;INSERT INTO &#39; . $table . &#39; (&#39; . implode(&#39;, &#39;, $fields) . &#39;) VALUES (&#39; . implode(&#39;, &#39;, $values) . &#39;)&#39;;
}
}
else
{
$sets = array();
foreach ($field_names AS $value)
{
if (array_key_exists($value, $field_values) == true)
{
$sets[] = $value . " = &#39;" . $field_values[$value] . "&#39;";
}
}
if (!empty($sets))
{
$sql = &#39;UPDATE &#39; . $table . &#39; SET &#39; . implode(&#39;, &#39;, $sets) . &#39; WHERE &#39; . $where;
}
}
if ($sql)
{
return $this->query($sql, $querymode);
}
else
{
return false;
}
}
function autoReplace($table, $field_values, $update_values, $where = &#39;&#39;, $querymode = &#39;&#39;)
{
$field_descs = $this->getAll(&#39;DESC &#39; . $table);
$primary_keys = array();
foreach ($field_descs AS $value)
{
$field_names[] = $value[&#39;Field&#39;];
if ($value[&#39;Key&#39;] == &#39;PRI&#39;)
{
$primary_keys[] = $value[&#39;Field&#39;];
}
}
$fields = $values = array();
foreach ($field_names AS $value)
{
if (array_key_exists($value, $field_values) == true)
{
$fields[] = $value;
$values[] = "&#39;" . $field_values[$value] . "&#39;";
}
}
$sets = array();
foreach ($update_values AS $key => $value)
{
if (array_key_exists($key, $field_values) == true)
{
if (is_int($value) || is_float($value))
{
$sets[] = $key . &#39; = &#39; . $key . &#39; + &#39; . $value;
}
else
{
$sets[] = $key . " = &#39;" . $value . "&#39;";
}
}
}
$sql = &#39;&#39;;
if (empty($primary_keys))
{
if (!empty($fields))
{
$sql = &#39;INSERT INTO &#39; . $table . &#39; (&#39; . implode(&#39;, &#39;, $fields) . &#39;) VALUES (&#39; . implode(&#39;, &#39;, $values) . &#39;)&#39;;
}
}
else
{
if ($this->version() >= &#39;4.1&#39;)
{
if (!empty($fields))
{
$sql = &#39;INSERT INTO &#39; . $table . &#39; (&#39; . implode(&#39;, &#39;, $fields) . &#39;) VALUES (&#39; . implode(&#39;, &#39;, $values) . &#39;)&#39;;
if (!empty($sets))
{
$sql .= &#39;ON DUPLICATE KEY UPDATE &#39; . implode(&#39;, &#39;, $sets);
}
}
}
else
{
if (empty($where))
{
$where = array();
foreach ($primary_keys AS $value)
{
if (is_numeric($value))
{
$where[] = $value . &#39; = &#39; . $field_values[$value];
}
else
{
$where[] = $value . " = &#39;" . $field_values[$value] . "&#39;";
}
}
$where = implode(&#39; AND &#39;, $where);
}
if ($where && (!empty($sets) || !empty($fields)))
{
if (intval($this->getOne("SELECT COUNT(*) FROM $table WHERE $where")) > 0)
{
if (!empty($sets))
{
$sql = &#39;UPDATE &#39; . $table . &#39; SET &#39; . implode(&#39;, &#39;, $sets) . &#39; WHERE &#39; . $where;
}
}
else
{
if (!empty($fields))
{
$sql = &#39;REPLACE INTO &#39; . $table . &#39; (&#39; . implode(&#39;, &#39;, $fields) . &#39;) VALUES (&#39; . implode(&#39;, &#39;, $values) . &#39;)&#39;;
}
}
}
}
}
if ($sql)
{
return $this->query($sql, $querymode);
}
else
{
return false;
}
}
function setMaxCacheTime($second)
{
$this->max_cache_time = $second;
}
function getMaxCacheTime()
{
return $this->max_cache_time;
}
function getSqlCacheData($sql, $cached = &#39;&#39;)
{
$sql = trim($sql);
$result = array();
$result[&#39;filename&#39;] = $this->root_path . $this->cache_data_dir . &#39;sqlcache_&#39; . abs(crc32($this->dbhash . $sql)) . &#39;_&#39; . md5($this->dbhash . $sql) . &#39;.php&#39;;
$data = @file_get_contents($result[&#39;filename&#39;]);
if (isset($data{23}))
{
$filetime = substr($data, 13, 10);
$data = substr($data, 23);
if (($cached == &#39;FILEFIRST&#39; && time() > $filetime + $this->max_cache_time) || ($cached == &#39;MYSQLFIRST&#39; && $this->table_lastupdate($this->get_table_name($sql)) > $filetime))
{
$result[&#39;storecache&#39;] = true;
}
else
{
$result[&#39;data&#39;] = @unserialize($data);
if ($result[&#39;data&#39;] === false)
{
$result[&#39;storecache&#39;] = true;
}
else
{
$result[&#39;storecache&#39;] = false;
}
}
}
else
{
$result[&#39;storecache&#39;] = true;
}
return $result;
}
function setSqlCacheData($result, $data)
{
if ($result[&#39;storecache&#39;] === true && $result[&#39;filename&#39;])
{
@file_put_contents($result[&#39;filename&#39;], &#39;&#39; . time() . serialize($data));
clearstatcache();
}
}
/* 获取 SQL 语句中最后更新的表的时间,有多个表的情况下,返回最新的表的时间 */
function table_lastupdate($tables)
{
if ($this->link_id === NULL)
{
$this->connect($this->settings[&#39;dbhost&#39;], $this->settings[&#39;dbuser&#39;], $this->settings[&#39;dbpw&#39;], $this->settings[&#39;dbname&#39;], $this->settings[&#39;charset&#39;], $this->settings[&#39;pconnect&#39;]);
$this->settings = array();
}
$lastupdatetime = &#39;0000-00-00 00:00:00&#39;;
$tables = str_replace(&#39;`&#39;, &#39;&#39;, $tables);
$this->mysql_disable_cache_tables = str_replace(&#39;`&#39;, &#39;&#39;, $this->mysql_disable_cache_tables);
foreach ($tables AS $table)
{
if (in_array($table, $this->mysql_disable_cache_tables) == true)
{
$lastupdatetime = &#39;2037-12-31 23:59:59&#39;;
break;
}
if (strstr($table, &#39;.&#39;) != NULL)
{
$tmp = explode(&#39;.&#39;, $table);
$sql = &#39;SHOW TABLE STATUS FROM `&#39; . trim($tmp[0]) . "` LIKE &#39;" . trim($tmp[1]) . "&#39;";
}
else
{
$sql = "SHOW TABLE STATUS LIKE &#39;" . trim($table) . "&#39;";
}
$result = $this->link_id->query($sql);
$row = $result->fetch_assoc();
if ($row[&#39;Update_time&#39;] > $lastupdatetime)
{
$lastupdatetime = $row[&#39;Update_time&#39;];
}
}
$lastupdatetime = strtotime($lastupdatetime) - $this->timezone + $this->timeline;
return $lastupdatetime;
}
function get_table_name($query_item)
{
$query_item = trim($query_item);
$table_names = array();
/* 判断语句中是不是含有 JOIN */
if (stristr($query_item, &#39; JOIN &#39;) == &#39;&#39;)
{
/* 解析一般的 SELECT FROM 语句 */
if (preg_match(&#39;/^SELECT.*?FROM\s*((?:`?\w+`?\s*\.\s*)?`?\w+`?(?:(?:\s*AS)?\s*`?\w+`?)?(?:\s*,\s*(?:`?\w+`?\s*\.\s*)?`?\w+`?(?:(?:\s*AS)?\s*`?\w+`?)?)*)/is&#39;, $query_item, $table_names))
{
$table_names = preg_replace(&#39;/((?:`?\w+`?\s*\.\s*)?`?\w+`?)[^,]*/&#39;, &#39;\1&#39;, $table_names[1]);
return preg_split(&#39;/\s*,\s*/&#39;, $table_names);
}
}
else
{
/* 对含有 JOIN 的语句进行解析 */
if (preg_match(&#39;/^SELECT.*?FROM\s*((?:`?\w+`?\s*\.\s*)?`?\w+`?)(?:(?:\s*AS)?\s*`?\w+`?)?.*?JOIN.*$/is&#39;, $query_item, $table_names))
{
$other_table_names = array();
preg_match_all(&#39;/JOIN\s*((?:`?\w+`?\s*\.\s*)?`?\w+`?)\s*/i&#39;, $query_item, $other_table_names);
return array_merge(array($table_names[1]), $other_table_names[1]);
}
}
return $table_names;
}
/* 设置不允许进行缓存的表 */
function set_disable_cache_tables($tables)
{
if (!is_array($tables))
{
$tables = explode(&#39;,&#39;, $tables);
}
foreach ($tables AS $table)
{
$this->mysql_disable_cache_tables[] = $table;
}
array_unique($this->mysql_disable_cache_tables);
}
/**
+----------------------------------------------------------
* 启动事务
+----------------------------------------------------------
* @access public
+----------------------------------------------------------
* @return void
+----------------------------------------------------------
*/
public function startTrans() {
//$this->initConnect(true);
if ( !$this->link_id ) return false;
//数据rollback 支持
if ($this->transTimes == 0) {
$this->link_id->autocommit(FALSE);
}
$this->transTimes++;
return ;
}
/**
+----------------------------------------------------------
* 用于非自动提交状态下面的查询提交
+----------------------------------------------------------
* @access public
+----------------------------------------------------------
* @return boolen
+----------------------------------------------------------
*/
public function commit()
{
if ($this->transTimes > 0) {
$result = $this->link_id->commit();
$this->transTimes = 0;
if(!$result){
$this->error_message[][&#39;message&#39;] = &#39;MySQL Query Error&#39;;
$this->error_message[][&#39;sql&#39;] = $sql;
$this->error_message[][&#39;error&#39;] = $this->link_id->error;
$this->error_message[][&#39;errno&#39;] = $this->link_id->errno;
$this->ErrorMsg();
return false;
}
}
return true;
}
/**
+----------------------------------------------------------
* 事务回滚
+----------------------------------------------------------
* @access public
+----------------------------------------------------------
* @return boolen
+----------------------------------------------------------
*/
public function rollback()
{
if ($this->transTimes > 0) {
$result = $this->link_id->rollback();
$this->transTimes = 0;
if(!$result){
$this->error_message[][&#39;message&#39;] = &#39;MySQL Query Error&#39;;
$this->error_message[][&#39;sql&#39;] = $sql;
$this->error_message[][&#39;error&#39;] = $this->link_id->error;
$this->error_message[][&#39;errno&#39;] = $this->link_id->errno;
$this->ErrorMsg();
return false;
}
}
return true;
}
}
Nach dem Login kopieren

代码当中加了几个方法,用于支持事务。

(2)更改cls_image.php的gd_version()方法,将这个方法改为静态方法,并且所有调用此方法的地方,都改为静态调用。

PHP5.6开始,已经不支持不兼容的上下文调用方法,并且产生 E_DEPRECATED 错误(以前是 E_STRICT)。

更改如下:

includes/cls_images.php,(gd_version方法体添加static关键字)
/**
* 获得服务器上的 GD 版本
*
* @access public
* @return int 可能的值为0,1,2
*/
static function gd_version()
{
....
}
Nach dem Login kopieren

在好几处调用此方法的地方都改为静态调用,比如includes/cls_images.php的好几个方法在调用时使用类对象调用:

function make_thumb($img, $thumb_width = 0, $thumb_height = 0, $path = &#39;&#39;, $bgcolor=&#39;&#39;)
{
$gd = $this->gd_version(); //获取 GD 版本。0 表示没有 GD 库,1 表示 GD 1.x,2 表示 GD 2.x
。。。
}
Nach dem Login kopieren

将其改为:

function make_thumb($img, $thumb_width = 0, $thumb_height = 0, $path = &#39;&#39;, $bgcolor=&#39;&#39;)
{
$gd = self::gd_version(); //获取 GD 版本。0 表示没有 GD 库,1 表示 GD 1.x,2 表示 GD 2.x
。。。
}
Nach dem Login kopieren

还有includes/lib_base.php文件的gd_version函数,改为:

function gd_version()
{
include_once(ROOT_PATH . &#39;includes/cls_image.php&#39;);
return cls_image::gd_version();
}
Nach dem Login kopieren

其他文件代码在调用时,最好改为调用lib_base文件的gd_version的函数。可以搜索更改。

(3)更改includes/lib_main.php文件的get_dyna_libs函数,该第一行的代码:

function get_dyna_libs($theme, $tmp)
{
$ext = end(explode(&#39;.&#39;, $tmp));
。。。
}
Nach dem Login kopieren

更改为:

function get_dyna_libs($theme, $tmp)
{
$tmp_ext = explode(&#39;.&#39;, $tmp);
$ext = end($tmp_ext);
}
Nach dem Login kopieren

end方法的接受的参数必须是引用传递值,这里使用了explode方法返回值,不可以直接套用。

(4)includes/cls_template.php代码:

preg_replace方法,自PHP5.5开始 /e修饰符已经废弃,所以要使用preg_replace_callback代替。此代替有多处:

fetch_str方法:

fetch_str($source)
{
。。。
return preg_replace_callback("/{([^\}\{\n]*)}/",&#39;self::select_replace&#39;, $source);
}
//新增的方法
private function select_replace($matches){
return $this->select($matches[1]);
}
Nach dem Login kopieren

select方法:

function select($tag)
{
。。。
$pregReplace = preg_replace_callback("/(\&#39;\\$[^,]+)/" , function($matches){
return stripslashes(trim($matches[1],&#39;\&#39;&#39;));
}, var_export($t, true));
。。。
}
smarty_prefilter_preCompile方法:
$source = preg_replace_callback($pattern, function($matches){
return &#39;{include file=&#39;.strtolower($matches[1]). &#39;}&#39;;
}, $source);
Nach dem Login kopieren

(5)将所有类的构造函数,都去除使用类名的构造函数,保留__construct():

涉及此改动的超多,用搜索一一找到并改动吧……这个就不列举了。

Das obige ist der detaillierte Inhalt vonSo ändern und unterstützen Sie PHP7 in Ecshop. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Was ist die Architektur von Ecshop? Was ist die Architektur von Ecshop? Feb 23, 2023 am 09:32 AM

ecshop ist eine „B2C“-Architektur; ecshop ist ein B2C-unabhängiges Online-Shop-System, das für Unternehmen und Einzelpersonen geeignet ist, um schnell personalisierte Online-Shops zu erstellen. Das System ist ein plattformübergreifendes Open-Source-Programm, das auf der PHP-Sprache und der MYSQL-Datenbankarchitektur basiert.

Welche Methoden gibt es zum Sortieren von Ecshop-Artikeln? Welche Methoden gibt es zum Sortieren von Ecshop-Artikeln? Jun 16, 2023 am 11:30 AM

So sortieren Sie Ecshop-Artikel: 1. Sortieren Sie nach Veröffentlichungszeit. Sie können die Reihenfolge der Artikel in der Liste steuern, indem Sie die Veröffentlichungszeit des Artikels ändern. 2. Sortieren nach Klicks. Sie können diese Sortierung erreichen, indem Sie das „Artikel-Klick-Ranking“ installieren „Plug-in Funktion: Dieses Plug-in kann die Anzahl der Klicks auf Artikel zählen; 3. Nach der Anzahl der Kommentare sortieren, Sie können diese Sortierfunktion implementieren, indem Sie das Plug-in „Article Comments Ranking“ installieren, das zählen kann Anzahl der Kommentare zu Artikeln; 4. Sortieren nach Relevanz. Diese Sortierfunktion kann durch die Installation des Plug-Ins „Suchranking“ erreicht werden.

Echop-Produktmanagement für Fortgeschrittene: Erfahren Sie, wie Sie Felder hinzufügen Echop-Produktmanagement für Fortgeschrittene: Erfahren Sie, wie Sie Felder hinzufügen Mar 12, 2024 pm 02:06 PM

Ecshop-Produktmanagement für Fortgeschrittene: Erfahren Sie, wie Sie Felder hinzufügen. Sie benötigen spezifische Codebeispiele. Wenn Sie Ecshop für das Produktmanagement verwenden, stoßen Sie häufig auf Situationen, in denen Sie einige benutzerdefinierte Felder hinzufügen müssen, um bestimmte Anforderungen zu erfüllen. Durch das Hinzufügen von Feldern können eine präzisere Produktverwaltung und ein besseres Benutzererlebnis erreicht werden. In diesem Artikel wird das Hinzufügen von Feldern in Ecshop vorgestellt und spezifische Codebeispiele bereitgestellt. Zunächst müssen wir die Notwendigkeit klären, Felder hinzuzufügen. Beispielsweise müssen wir der Produktdetailseite ein Feld „Produktionsdatum“ hinzufügen

Was sind die Merkmale von Ecshop? Was sind die Merkmale von Ecshop? Feb 13, 2023 am 09:43 AM

Merkmale: 1. Open-Source-System mit Flexibilität, Anpassbarkeit und hoher Skalierbarkeit; 3. Umfangreiche Vorlagen und Plug-ins; 5. Vermeidung von Einschränkungen durch Softwareanbieter; und Stabilität; 7. Mobiles H5-Framework-Upgrade, basierend auf VUE, umfassenderer Ersatz, flexibler und offener 8. Mehrstufige Rabattfunktion, Unterstützung von QR-Codes, Postern und anderen Werbemethoden, unbegrenzte Spaltungsentwicklung von Distributoren; Das Verwaltungsterminal wurde komplett erneuert, die Benutzeroberfläche ist einfach und schön und das Bedienerlebnis wurde verbessert. 9. Unterstützt PHP7.2 und die Leistung wird verdoppelt.

Welches Programm ist Ecshop? Welches Programm ist Ecshop? Feb 16, 2023 am 10:38 AM

ECShop ist ein B2C-unabhängiges Online-Shop-System. Es handelt sich um ein plattformübergreifendes Open-Source-Programm, das auf der PHP-Sprache und der MYSQL-Datenbankarchitektur basiert. Es eignet sich für Unternehmen und Privatpersonen, um schnell personalisierte Online-Shops zu erstellen. Die Merkmale des ecshop-Mall-Systems: 1. Unterstützung der unabhängigen Sekundärentwicklung; 2. Umfangreiche Vorlagen und Plug-Ins; 4. Vermeidung von Einschränkungen durch Softwareanbieter;

Was ist das Ecshop-Modell? Was ist das Ecshop-Modell? Feb 22, 2023 am 09:37 AM

ecshop ist ein B2C-Modell. ECShop ist ein B2C-unabhängiges Online-Shop-System, das sich für Unternehmen und Privatpersonen eignet, um schnell personalisierte Online-Shops aufzubauen. B2C bezieht sich auf ein E-Commerce-Modell und ist auch ein Einzelhandelsmodell, bei dem Produkte und Dienstleistungen direkt an Verbraucher verkauft werden. Die Zahlungsmethode des B2C-E-Commerce ist eine Kombination aus Nachnahme und Online-Zahlung, und die meisten Unternehmen entscheiden sich für Logistik Outsourcing für die Lieferung, um Betriebskosten zu sparen.

So entfernen Sie das Urheberrecht am unteren Rand von Ecshop So entfernen Sie das Urheberrecht am unteren Rand von Ecshop Aug 08, 2023 pm 02:42 PM

Methode zum Entfernen des Urheberrechts unten in ecshop: 1. Ändern Sie die Vorlagendatei. Der spezifische Speicherort lautet: themes/your_theme-Verzeichnis. Suchen Sie in diesem Verzeichnis nach der Datei footer.html, öffnen Sie sie mit einem Texteditor und suchen Sie das darin enthaltene Codesegment Entfernen Sie die Copyright-Informationen, löschen Sie sie oder kommentieren Sie sie aus. Speichern Sie einfach die Datei und schließen Sie sie. 2. Um das Plug-in zu verwenden, melden Sie sich im Backend an, klicken Sie auf Plug-in-Verwaltung, suchen Sie unten nach Urheberrecht und anderen verwandten Schlüsselwörtern, wählen Sie ein geeignetes Plug-in zur Installation und Aktivierung aus 3. Um ein Theme zu kaufen, kaufen Sie es auf der offiziellen Website von ECShop usw.

Welche Funktionen hat Ecshop? Welche Funktionen hat Ecshop? Feb 23, 2023 am 09:29 AM

Die Funktionen von ecshop sind: 1. Produktverwaltung; 3. Anzeigenverwaltung; 10. Vorlagenverwaltung; 11. Datenbankverwaltung; 12. SMS-Verwaltung;

See all articles