ecshop适应在PHP7的修改方法解决报错的实现.docx
- 文档编号:25531839
- 上传时间:2023-06-09
- 格式:DOCX
- 页数:19
- 大小:17.77KB
ecshop适应在PHP7的修改方法解决报错的实现.docx
《ecshop适应在PHP7的修改方法解决报错的实现.docx》由会员分享,可在线阅读,更多相关《ecshop适应在PHP7的修改方法解决报错的实现.docx(19页珍藏版)》请在冰豆网上搜索。
ecshop适应在PHP7的修改方法解决报错的实现
ecshop适应在PHP7的修改方法解决报错的实现
下面小编就为大家带来一篇ecshop适应在PHP7的修改方法解决报错的实现。
小编觉得挺不错的,现在就分享给大家,也给大家做个参考。
一起跟随小编过来看看吧
ecshop这个系统,到目前也没见怎么推出新版本,如果是新项目,不太建议使用它。
不过,因为我一直以来都在使用中,所以不得不更改让其适应PHP新版本。
现在PHP7已经出发行版了,所以更改来继续使用吧。
具体的更改有以下方面:
(1)将mysql扩展的使用替换掉,改为使用mysqli或pdo:
从php5.5开始,mysql扩展将废弃了。
具体更改的文件在于includes/cls_mysql.php。
这是个不小的工程,文件代码太长……
if(!
defined('DITAN_ECS'))
{
die('Hackingattempt');
}
classcls_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);
}
functioncls_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
);
}
}
functionconnect($dbhost,$dbuser,$dbpw,$dbname='',$charset='utf8',$pconnect=0,$quiet=0)
{
if($pconnect)
{
$this->link_id=newmysqli('p:
'.$dbhost,$dbuser,$dbpw);
if($this->link_id->connect_error)
{
if(!
$quiet)
{
$this->ErrorMsg("Can'tpConnectMySQLServer($dbhost)!
");
}
returnfalse;
}
}
else
{
$this->link_id=newmysqli($dbhost,$dbuser,$dbpw);
if($this->link_id->connect_error)
{
if(!
$quiet)
{
$this->ErrorMsg("Can'tConnectMySQLServer($dbhost)!
");
}
returnfalse;
}
}
$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("SETsql_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("SHOWVARIABLESLIKE'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("SELECTUNIX_TIMESTAMP()AStimeline,UNIX_TIMESTAMP('".date('Y-m-dH:
i:
s',$this->starttime)."')AStimezone");
$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'tselectMySQLdatabase($dbname)!
");
}
returnfalse;
}
else
{
returntrue;
}
}
else
{
returntrue;
}
}
functionselect_database($dbname)
{
return$this->link_id->select_db($dbname);
}
functionset_mysql_charset($charset)
{
if(in_array(strtolower($charset),array('gbk','big5','utf-8','utf8')))
{
$charset=str_replace('-','',$charset);
}
$this->link_id->set_charset($charset);
}
functionfetch_array($query,$result_type=MYSQLI_ASSOC)
{
$row=$query->fetch_array($result_type);
$query->free();
return$row;
}
functionquery($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->=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']='MySQLQueryError';
$this->error_[]['sql']=$sql;
$this->error_message[]['error']=$this->link_id->error;
$this->error_message[]['errno']=$this->link_id->errno;
$this->ErrorMsg();
returnfalse;
}
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;
}
functionaffected_rows()
{
return$this->link_id->affected_rows;
}
functionerror()
{
return$this->link_id->error;
}
functionerrno()
{
return$this->link_id->errno;
}
functionresult($query,$row)
{
$query->data_seek($row);
$result=$query->fetch_row();
$query->free();
return$result;
}
functionnum_rows($query)
{
return$query->num_rows;
}
functionnum_fields($query)
{
return$this->link_id->field_count;
}
functionfree_result($query)
{
return$query->free();
}
functioninsert_id()
{
return$this->link_id->insert_id;
}
functionfetchRow($query)
{
return$query->fetch_assoc();
}
functionfetch_fields($query)
{
return$query->fetch_field();
}
functionversion()
{
return$this->version;
}
functionping()
{
return$this->link_id->ping();
}
functionescape_string($unescaped_string)
{
return$this->link_id->real_escape_string($unescaped_string);
}
functionclose()
{
return$this->link_id->close();
}
functionErrorMsg($message='',$sql='')
{
if($message)
{
echo"DTXBinfo:
$message\n\n
";
//print('
}
else
{
echo"MySQLservererrorreport:
";
print_r($this->error_message);
//echo"
}
exit;
}
/*仿真Adodb函数*/
functionselectLimit($sql,$num,$start=0)
{
if($start==0)
{
$sql.='LIMIT'.$num;
}
else
{
$sql.='LIMIT'.$start.','.$num;
}
return$this->query($sql);
}
functiongetOne($sql,$limited=false)
{
if($limited==true)
{
$sql=trim($sql.'LIMIT1');
}
$res=$this->query($sql);
if($res!
==false)
{
$row=$res->fetch_row();
$res->free();
if($row!
==false)
{
return$row[0];
}
else
{
return'';
}
}
else
{
returnfalse;
}
}
functiongetOneCached($sql,$cached='FILEFIRST')
{
$sql=trim($sql.'LIMIT1');
$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;
}
functiongetAll($sql)
{
$res=$this->query($sql);
if($res!
==false)
{
$arr=$res->fetch_all(MYSQLI_ASSOC);
$res->free();
return$arr;
}
else
{
returnfalse;
}
}
functiongetAllCached($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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ecshop 适应 PHP7 修改 方法 解决 实现