{"id":31630,"date":"2024-11-25T13:09:30","date_gmt":"2024-11-25T05:09:30","guid":{"rendered":"https:\/\/fwq.ai\/blog\/31630\/"},"modified":"2024-11-25T13:09:30","modified_gmt":"2024-11-25T05:09:30","slug":"ecshop%e5%a6%82%e4%bd%95%e4%bf%ae%e6%94%b9%e5%b9%b6%e6%94%af%e6%8c%81php7","status":"publish","type":"post","link":"https:\/\/fwq.ai\/blog\/31630\/","title":{"rendered":"ecshop\u5982\u4f55\u4fee\u6539\u5e76\u652f\u6301PHP7"},"content":{"rendered":"<blockquote><p>\n  ecshop\u4fee\u6539php\u7684\u65b9\u6cd5\uff1a\u9996\u5148\u5c06mysql\u6269\u5c55\u7684\u4f7f\u7528\u66ff\u6362\u6389\uff0c\u6539\u4e3a\u4f7f\u7528mysqli\u6216pdo\uff1b\u7136\u540e\u66f4\u6539\u201ccls_image.php\u201d\u7684\u201cgd_version()\u201d\u65b9\u6cd5\uff0c\u5c06\u8fd9\u4e2a\u65b9\u6cd5\u6539\u4e3a\u9759\u6001\u65b9\u6cd5\uff1b\u6700\u540e\u53bb\u9664\u4f7f\u7528\u7c7b\u540d\u7684\u6784\u9020\u51fd\u6570\u3002\n<\/p><\/blockquote>\n<p><img decoding=\"async\" src=\"https:\/\/img.php.cn\/upload\/article\/202007\/11\/2020071109540210999.jpg\" class=\"aligncenter\" title=\"ecshop\u5982\u4f55\u4fee\u6539\u5e76\u652f\u6301PHP7\u63d2\u56fe\" alt=\"ecshop\u5982\u4f55\u4fee\u6539\u5e76\u652f\u6301PHP7\u63d2\u56fe\" \/><\/p>\n<p><strong>ecshop\u652f\u6301PHP7\u7684\u4fee\u6539\u65b9\u6cd5<\/strong><\/p>\n<p>\uff081\uff09\u5c06mysql\u6269\u5c55\u7684\u4f7f\u7528\u66ff\u6362\u6389\uff0c\u6539\u4e3a\u4f7f\u7528mysqli\u6216pdo\uff08\u63a8\u8350\u4f7f\u7528mysqli\uff09\uff1a<\/p>\n<p>\u63a8\u8350\uff1a\u300a\u300b<\/p>\n<p>\u4ecephp5.5\u5f00\u59cb\uff0cmysql\u6269\u5c55\u5c06\u5e9f\u5f03\u4e86\u3002 \u5177\u4f53\u66f4\u6539\u7684\u6587\u4ef6\u5728\u4e8eincludes\/cls_mysql.php\u3002\u8fd9\u662f\u4e2a\u4e0d\u5c0f\u7684\u5de5\u7a0b\uff0c\u6587\u4ef6\u4ee3\u7801\u592a\u957f\u2026\u2026<\/p>\n<p><span>\u7acb\u5373\u5b66\u4e60<\/span>\u201c\u201d\uff1b<\/p>\n<pre>if&nbsp;(!defined('DITAN_ECS'))\n{\ndie('Hacking&nbsp;attempt');\n}\nclass&nbsp;cls_mysql\n{\nvar&nbsp;$link_id&nbsp;=&nbsp;NULL;\nvar&nbsp;$settings&nbsp;=&nbsp;array();\nvar&nbsp;$queryCount&nbsp;=&nbsp;0;\nvar&nbsp;$queryTime&nbsp;=&nbsp;'';\nvar&nbsp;$queryLog&nbsp;=&nbsp;array();\nvar&nbsp;$max_cache_time&nbsp;=&nbsp;300;&nbsp;\/\/&nbsp;\u6700\u5927\u7684\u7f13\u5b58\u65f6\u95f4\uff0c\u4ee5\u79d2\u4e3a\u5355\u4f4d\nvar&nbsp;$cache_data_dir&nbsp;=&nbsp;'temp\/query_caches\/';\nvar&nbsp;$root_path&nbsp;=&nbsp;'';\nvar&nbsp;$error_message&nbsp;=&nbsp;array();\nvar&nbsp;$platform&nbsp;=&nbsp;'';\nvar&nbsp;$version&nbsp;=&nbsp;'';\nvar&nbsp;$dbhash&nbsp;=&nbsp;'';\nvar&nbsp;$starttime&nbsp;=&nbsp;0;\nvar&nbsp;$timeline&nbsp;=&nbsp;0;\nvar&nbsp;$timezone&nbsp;=&nbsp;0;\n\/\/&nbsp;\u4e8b\u52a1\u6307\u4ee4\u6570\nprotected&nbsp;$transTimes&nbsp;=&nbsp;0;\nvar&nbsp;$mysql_config_cache_file_time&nbsp;=&nbsp;0;\nvar&nbsp;$mysql_disable_cache_tables&nbsp;=&nbsp;array();&nbsp;\/\/&nbsp;\u4e0d\u5141\u8bb8\u88ab\u7f13\u5b58\u7684\u8868\uff0c\u9047\u5230\u5c06\u4e0d\u4f1a\u8fdb\u884c\u7f13\u5b58\nfunction&nbsp;__construct($dbhost,&nbsp;$dbuser,&nbsp;$dbpw,&nbsp;$dbname&nbsp;=&nbsp;'',&nbsp;$charset&nbsp;=&nbsp;'gbk',&nbsp;$pconnect&nbsp;=&nbsp;0,&nbsp;$quiet&nbsp;=&nbsp;0)\n{\n$this-&amp;gt;cls_mysql($dbhost,&nbsp;$dbuser,&nbsp;$dbpw,&nbsp;$dbname,&nbsp;$charset,&nbsp;$pconnect,&nbsp;$quiet);\n}\nfunction&nbsp;cls_mysql($dbhost,&nbsp;$dbuser,&nbsp;$dbpw,&nbsp;$dbname&nbsp;=&nbsp;'',&nbsp;$charset&nbsp;=&nbsp;'gbk',&nbsp;$pconnect&nbsp;=&nbsp;0,&nbsp;$quiet&nbsp;=&nbsp;0)\n{\nif&nbsp;(defined('EC_CHARSET'))\n{\n$charset&nbsp;=&nbsp;strtolower(str_replace('-',&nbsp;'',&nbsp;EC_CHARSET));\n}\nif&nbsp;(defined('ROOT_PATH')&nbsp;&amp;amp;&amp;amp;&nbsp;!$this-&amp;gt;root_path)\n{\n$this-&amp;gt;root_path&nbsp;=&nbsp;ROOT_PATH;\n}\nif&nbsp;($quiet)\n{\n$this-&amp;gt;connect($dbhost,&nbsp;$dbuser,&nbsp;$dbpw,&nbsp;$dbname,&nbsp;$charset,&nbsp;$pconnect,&nbsp;$quiet);\n}\nelse\n{\n$this-&amp;gt;settings&nbsp;=&nbsp;array(\n'dbhost'&nbsp;=&amp;gt;&nbsp;$dbhost,\n'dbuser'&nbsp;=&amp;gt;&nbsp;$dbuser,\n'dbpw'&nbsp;=&amp;gt;&nbsp;$dbpw,\n'dbname'&nbsp;=&amp;gt;&nbsp;$dbname,\n'charset'&nbsp;=&amp;gt;&nbsp;$charset,\n'pconnect'&nbsp;=&amp;gt;&nbsp;$pconnect\n);\n}\n}\nfunction&nbsp;connect($dbhost,&nbsp;$dbuser,&nbsp;$dbpw,&nbsp;$dbname&nbsp;=&nbsp;'',&nbsp;$charset&nbsp;=&nbsp;'utf8',&nbsp;$pconnect&nbsp;=&nbsp;0,&nbsp;$quiet&nbsp;=&nbsp;0)\n{\nif&nbsp;($pconnect)\n{\n$this-&amp;gt;link_id&nbsp;=&nbsp;new&nbsp;mysqli('p:'.$dbhost,&nbsp;$dbuser,&nbsp;$dbpw);\nif&nbsp;($this-&amp;gt;link_id-&amp;gt;connect_error)\n{\nif&nbsp;(!$quiet)\n{\n$this-&amp;gt;ErrorMsg(\"Can't&nbsp;pConnect&nbsp;MySQL&nbsp;Server($dbhost)!\");\n}\nreturn&nbsp;false;\n}\n}\nelse\n{\n$this-&amp;gt;link_id&nbsp;=&nbsp;new&nbsp;mysqli($dbhost,&nbsp;$dbuser,&nbsp;$dbpw);\nif&nbsp;($this-&amp;gt;link_id-&amp;gt;connect_error)\n{\nif&nbsp;(!$quiet)\n{\n$this-&amp;gt;ErrorMsg(\"Can't&nbsp;Connect&nbsp;MySQL&nbsp;Server($dbhost)!\");\n}\nreturn&nbsp;false;\n}\n}\n$this-&amp;gt;dbhash&nbsp;=&nbsp;md5($this-&amp;gt;root_path&nbsp;.&nbsp;$dbhost&nbsp;.&nbsp;$dbuser&nbsp;.&nbsp;$dbpw&nbsp;.&nbsp;$dbname);\n$this-&amp;gt;version&nbsp;=&nbsp;$this-&amp;gt;link_id-&amp;gt;server_version;\n\/*&nbsp;\u5bf9\u5b57\u7b26\u96c6\u8fdb\u884c\u521d\u59cb\u5316&nbsp;*\/\n$this-&amp;gt;link_id-&amp;gt;set_charset($charset);\n$this-&amp;gt;link_id-&amp;gt;query(\"SET&nbsp;sql_mode=''\");\n$sqlcache_config_file&nbsp;=&nbsp;$this-&amp;gt;root_path&nbsp;.&nbsp;$this-&amp;gt;cache_data_dir&nbsp;.&nbsp;'sqlcache_config_file_'&nbsp;.&nbsp;$this-&amp;gt;dbhash&nbsp;.&nbsp;'.php';\n@include($sqlcache_config_file);\n$this-&amp;gt;starttime&nbsp;=&nbsp;time();\nif&nbsp;($this-&amp;gt;max_cache_time&nbsp;&amp;amp;&amp;amp;&nbsp;$this-&amp;gt;starttime&nbsp;&amp;gt;&nbsp;$this-&amp;gt;mysql_config_cache_file_time&nbsp;+&nbsp;$this-&amp;gt;max_cache_time)\n{\nif&nbsp;($dbhost&nbsp;!=&nbsp;'.')\n{\n$result&nbsp;=&nbsp;$this-&amp;gt;link_id-&amp;gt;query(\"SHOW&nbsp;VARIABLES&nbsp;LIKE&nbsp;'basedir'\");\n$row&nbsp;=&nbsp;$result-&amp;gt;fetch_array(MYSQLI_ASSOC);\n$result-&amp;gt;free();\nif&nbsp;(!empty($row['Value']{1})&nbsp;&amp;amp;&amp;amp;&nbsp;$row['Value']{1}&nbsp;==&nbsp;':'&nbsp;&amp;amp;&amp;amp;&nbsp;!empty($row['Value']{2})&nbsp;&amp;amp;&amp;amp;&nbsp;$row['Value']{2}&nbsp;==&nbsp;\"\/\")\n{\n$this-&amp;gt;platform&nbsp;=&nbsp;'WINDOWS';\n}\nelse\n{\n$this-&amp;gt;platform&nbsp;=&nbsp;'OTHER';\n}\n}\nelse\n{\n$this-&amp;gt;platform&nbsp;=&nbsp;'WINDOWS';\n}\nif&nbsp;($this-&amp;gt;platform&nbsp;==&nbsp;'OTHER'&nbsp;&amp;amp;&amp;amp;\n($dbhost&nbsp;!=&nbsp;'.'&nbsp;&amp;amp;&amp;amp;&nbsp;strtolower($dbhost)&nbsp;!=&nbsp;'localhost:3306'&nbsp;&amp;amp;&amp;amp;&nbsp;$dbhost&nbsp;!=&nbsp;'127.0.0.1:3306')&nbsp;||\ndate_default_timezone_get()&nbsp;==&nbsp;'UTC')\n{\n$result&nbsp;=&nbsp;$this-&amp;gt;link_id-&amp;gt;query(\"SELECT&nbsp;UNIX_TIMESTAMP()&nbsp;AS&nbsp;timeline,&nbsp;UNIX_TIMESTAMP('\"&nbsp;.&nbsp;date('Y-m-d&nbsp;H:i:s',&nbsp;$this-&amp;gt;starttime)&nbsp;.&nbsp;\"')&nbsp;AS&nbsp;timezone\");\n$row&nbsp;=&nbsp;$result-&amp;gt;fetch_array(MYSQLI_ASSOC);\n$result-&amp;gt;free();\nif&nbsp;($dbhost&nbsp;!=&nbsp;'.'&nbsp;&amp;amp;&amp;amp;&nbsp;strtolower($dbhost)&nbsp;!=&nbsp;'localhost:3306'&nbsp;&amp;amp;&amp;amp;&nbsp;$dbhost&nbsp;!=&nbsp;'127.0.0.1:3306')\n{\n$this-&amp;gt;timeline&nbsp;=&nbsp;$this-&amp;gt;starttime&nbsp;-&nbsp;$row['timeline'];\n}\nif&nbsp;(date_default_timezone_get()&nbsp;==&nbsp;'UTC')\n{\n$this-&amp;gt;timezone&nbsp;=&nbsp;$this-&amp;gt;starttime&nbsp;-&nbsp;$row['timezone'];\n}\n}\n$content&nbsp;=&nbsp;'mysql_config_cache_file_time&nbsp;=&nbsp;'&nbsp;.&nbsp;$this-&amp;gt;starttime&nbsp;.&nbsp;\";\r\n\"&nbsp;.\n'$this-&amp;gt;timeline&nbsp;=&nbsp;'&nbsp;.&nbsp;$this-&amp;gt;timeline&nbsp;.&nbsp;\";\r\n\"&nbsp;.\n'$this-&amp;gt;timezone&nbsp;=&nbsp;'&nbsp;.&nbsp;$this-&amp;gt;timezone&nbsp;.&nbsp;\";\r\n\"&nbsp;.\n'$this-&amp;gt;platform&nbsp;=&nbsp;'&nbsp;.&nbsp;\"'\"&nbsp;.&nbsp;$this-&amp;gt;platform&nbsp;.&nbsp;\"';\r\n?\"&nbsp;.&nbsp;'&amp;gt;';\n@file_put_contents($sqlcache_config_file,&nbsp;$content);\n}\n\/*&nbsp;\u9009\u62e9\u6570\u636e\u5e93&nbsp;*\/\nif&nbsp;($dbname)\n{\nif&nbsp;($this-&amp;gt;link_id-&amp;gt;select_db($dbname)&nbsp;===&nbsp;false&nbsp;)\n{\nif&nbsp;(!$quiet)\n{\n$this-&amp;gt;ErrorMsg(\"Can't&nbsp;select&nbsp;MySQL&nbsp;database($dbname)!\");\n}\nreturn&nbsp;false;\n}\nelse\n{\nreturn&nbsp;true;\n}\n}\nelse\n{\nreturn&nbsp;true;\n}\n}\nfunction&nbsp;select_database($dbname)\n{\nreturn&nbsp;$this-&amp;gt;link_id-&amp;gt;select_db($dbname);\n}\nfunction&nbsp;set_mysql_charset($charset)\n{\nif&nbsp;(in_array(strtolower($charset),&nbsp;array('gbk',&nbsp;'big5',&nbsp;'utf-8',&nbsp;'utf8')))\n{\n$charset&nbsp;=&nbsp;str_replace('-',&nbsp;'',&nbsp;$charset);\n}\n$this-&amp;gt;link_id-&amp;gt;set_charset($charset);\n}\nfunction&nbsp;fetch_array($query,&nbsp;$result_type&nbsp;=&nbsp;MYSQLI_ASSOC)\n{\n$row&nbsp;=&nbsp;$query-&amp;gt;fetch_array($result_type);\n$query-&amp;gt;free();\nreturn&nbsp;$row;\n}\nfunction&nbsp;query($sql,&nbsp;$type&nbsp;=&nbsp;'')\n{\nif&nbsp;($this-&amp;gt;link_id&nbsp;===&nbsp;NULL)\n{\n$this-&amp;gt;connect($this-&amp;gt;settings['dbhost'],&nbsp;$this-&amp;gt;settings['dbuser'],&nbsp;$this-&amp;gt;settings['dbpw'],&nbsp;$this-&amp;gt;settings['dbname'],&nbsp;$this-&amp;gt;settings['charset'],&nbsp;$this-&amp;gt;settings['pconnect']);\n$this-&amp;gt;settings&nbsp;=&nbsp;array();\n}\nif&nbsp;($this-&amp;gt;queryCount++&nbsp;queryLog[]&nbsp;=&nbsp;$sql;\n}\nif&nbsp;($this-&amp;gt;queryTime&nbsp;==&nbsp;'')\n{\nif&nbsp;(PHP_VERSION&nbsp;&amp;gt;=&nbsp;'5.0.0')\n{\n$this-&amp;gt;queryTime&nbsp;=&nbsp;microtime(true);\n}\nelse\n{\n$this-&amp;gt;queryTime&nbsp;=&nbsp;microtime();\n}\n}\n\/*&nbsp;\u5f53\u5f53\u524d\u7684\u65f6\u95f4\u5927\u4e8e\u7c7b\u521d\u59cb\u5316\u65f6\u95f4\u7684\u65f6\u5019\uff0c\u81ea\u52a8\u6267\u884c&nbsp;ping&nbsp;\u8fd9\u4e2a\u81ea\u52a8\u91cd\u65b0\u8fde\u63a5\u64cd\u4f5c&nbsp;*\/\nif&nbsp;(time()&nbsp;&amp;gt;&nbsp;$this-&amp;gt;starttime&nbsp;+&nbsp;1)\n{\n$this-&amp;gt;link_id-&amp;gt;ping();\n}\nif&nbsp;(!($query&nbsp;=&nbsp;$this-&amp;gt;link_id-&amp;gt;query($sql))&nbsp;&amp;amp;&amp;amp;&nbsp;$type&nbsp;!=&nbsp;'SILENT')\n{\n$this-&amp;gt;error_message[]['message']&nbsp;=&nbsp;'MySQL&nbsp;Query&nbsp;Error';\n$this-&amp;gt;error_message[]['sql']&nbsp;=&nbsp;$sql;\n$this-&amp;gt;error_message[]['error']&nbsp;=&nbsp;$this-&amp;gt;link_id-&amp;gt;error;\n$this-&amp;gt;error_message[]['errno']&nbsp;=&nbsp;$this-&amp;gt;link_id-&amp;gt;errno;\n$this-&amp;gt;ErrorMsg();\nreturn&nbsp;false;\n}\nif&nbsp;(defined('DEBUG_MODE')&nbsp;&amp;amp;&amp;amp;&nbsp;(DEBUG_MODE&nbsp;&amp;amp;&nbsp;8)&nbsp;==&nbsp;8)\n{\n$logfilename&nbsp;=&nbsp;$this-&amp;gt;root_path&nbsp;.&nbsp;DATA_DIR&nbsp;.&nbsp;'\/mysql_query_'&nbsp;.&nbsp;$this-&amp;gt;dbhash&nbsp;.&nbsp;'_'&nbsp;.&nbsp;date('Y_m_d')&nbsp;.&nbsp;'.log';\n$str&nbsp;=&nbsp;$sql&nbsp;.&nbsp;\"\n\n\";\nif&nbsp;(PHP_VERSION&nbsp;&amp;gt;=&nbsp;'5.0')\n{\nfile_put_contents($logfilename,&nbsp;$str,&nbsp;FILE_APPEND);\n}\nelse\n{\n$fp&nbsp;=&nbsp;@fopen($logfilename,&nbsp;'ab+');\nif&nbsp;($fp)\n{\nfwrite($fp,&nbsp;$str);\nfclose($fp);\n}\n}\n}\nreturn&nbsp;$query;\n}\nfunction&nbsp;affected_rows()\n{\nreturn&nbsp;$this-&amp;gt;link_id-&amp;gt;affected_rows;\n}\nfunction&nbsp;error()\n{\nreturn&nbsp;$this-&amp;gt;link_id-&amp;gt;error;\n}\nfunction&nbsp;errno()\n{\nreturn&nbsp;$this-&amp;gt;link_id-&amp;gt;errno;\n}\nfunction&nbsp;result($query,&nbsp;$row)\n{\n$query-&amp;gt;data_seek($row);\n$result&nbsp;=&nbsp;$query-&amp;gt;fetch_row();\n$query-&amp;gt;free();\nreturn&nbsp;$result;\n}\nfunction&nbsp;num_rows($query)\n{\nreturn&nbsp;$query-&amp;gt;num_rows;\n}\nfunction&nbsp;num_fields($query)\n{\nreturn&nbsp;$this-&amp;gt;link_id-&amp;gt;field_count;\n}\nfunction&nbsp;free_result($query)\n{\nreturn&nbsp;$query-&amp;gt;free();\n}\nfunction&nbsp;insert_id()\n{\nreturn&nbsp;$this-&amp;gt;link_id-&amp;gt;insert_id;\n}\nfunction&nbsp;fetchRow($query)\n{\nreturn&nbsp;$query-&amp;gt;fetch_assoc();\n}\nfunction&nbsp;fetch_fields($query)\n{\nreturn&nbsp;$query-&amp;gt;fetch_field();\n}\nfunction&nbsp;version()\n{\nreturn&nbsp;$this-&amp;gt;version;\n}\nfunction&nbsp;ping()\n{\nreturn&nbsp;$this-&amp;gt;link_id-&amp;gt;ping();\n}\nfunction&nbsp;escape_string($unescaped_string)\n{\nreturn&nbsp;$this-&amp;gt;link_id-&amp;gt;real_escape_string($unescaped_string);\n}\nfunction&nbsp;close()\n{\nreturn&nbsp;$this-&amp;gt;link_id-&amp;gt;close();\n}\nfunction&nbsp;ErrorMsg($message&nbsp;=&nbsp;'',&nbsp;$sql&nbsp;=&nbsp;'')\n{\nif&nbsp;($message)\n{\necho&nbsp;\"DTXB&nbsp;info:&nbsp;$message\n\n\n\";\n\/\/print('http:\/\/faq.comsenz.com\/');\n}\nelse\n{\necho&nbsp;\"MySQL&nbsp;server&nbsp;error&nbsp;report:\";\nprint_r($this-&amp;gt;error_message);\n\/\/echo&nbsp;\"\nhttp:\/\/faq.comsenz.com\/\";\n}\nexit;\n}\n\/*&nbsp;\u4eff\u771f&nbsp;Adodb&nbsp;\u51fd\u6570&nbsp;*\/\nfunction&nbsp;selectLimit($sql,&nbsp;$num,&nbsp;$start&nbsp;=&nbsp;0)\n{\nif&nbsp;($start&nbsp;==&nbsp;0)\n{\n$sql&nbsp;.=&nbsp;'&nbsp;LIMIT&nbsp;'&nbsp;.&nbsp;$num;\n}\nelse\n{\n$sql&nbsp;.=&nbsp;'&nbsp;LIMIT&nbsp;'&nbsp;.&nbsp;$start&nbsp;.&nbsp;',&nbsp;'&nbsp;.&nbsp;$num;\n}\nreturn&nbsp;$this-&amp;gt;query($sql);\n}\nfunction&nbsp;getOne($sql,&nbsp;$limited&nbsp;=&nbsp;false)\n{\nif&nbsp;($limited&nbsp;==&nbsp;true)\n{\n$sql&nbsp;=&nbsp;trim($sql&nbsp;.&nbsp;'&nbsp;LIMIT&nbsp;1');\n}\n$res&nbsp;=&nbsp;$this-&amp;gt;query($sql);\nif&nbsp;($res&nbsp;!==&nbsp;false)\n{\n$row&nbsp;=&nbsp;$res-&amp;gt;fetch_row();\n$res-&amp;gt;free();\nif&nbsp;($row&nbsp;!==&nbsp;false)\n{\nreturn&nbsp;$row[0];\n}\nelse\n{\nreturn&nbsp;'';\n}\n}\nelse\n{\nreturn&nbsp;false;\n}\n}\nfunction&nbsp;getOneCached($sql,&nbsp;$cached&nbsp;=&nbsp;'FILEFIRST')\n{\n$sql&nbsp;=&nbsp;trim($sql&nbsp;.&nbsp;'&nbsp;LIMIT&nbsp;1');\n$cachefirst&nbsp;=&nbsp;($cached&nbsp;==&nbsp;'FILEFIRST'&nbsp;||&nbsp;($cached&nbsp;==&nbsp;'MYSQLFIRST'&nbsp;&amp;amp;&amp;amp;&nbsp;$this-&amp;gt;platform&nbsp;!=&nbsp;'WINDOWS'))&nbsp;&amp;amp;&amp;amp;&nbsp;$this-&amp;gt;max_cache_time;\nif&nbsp;(!$cachefirst)\n{\nreturn&nbsp;$this-&amp;gt;getOne($sql,&nbsp;true);\n}\nelse\n{\n$result&nbsp;=&nbsp;$this-&amp;gt;getSqlCacheData($sql,&nbsp;$cached);\nif&nbsp;(empty($result['storecache'])&nbsp;==&nbsp;true)\n{\nreturn&nbsp;$result['data'];\n}\n}\n$arr&nbsp;=&nbsp;$this-&amp;gt;getOne($sql,&nbsp;true);\nif&nbsp;($arr&nbsp;!==&nbsp;false&nbsp;&amp;amp;&amp;amp;&nbsp;$cachefirst)\n{\n$this-&amp;gt;setSqlCacheData($result,&nbsp;$arr);\n}\nreturn&nbsp;$arr;\n}\nfunction&nbsp;getAll($sql)\n{\n$res&nbsp;=&nbsp;$this-&amp;gt;query($sql);\nif&nbsp;($res&nbsp;!==&nbsp;false)\n{\n$arr&nbsp;=&nbsp;$res-&amp;gt;fetch_all(MYSQLI_ASSOC);\n$res-&amp;gt;free();\nreturn&nbsp;$arr;\n}\nelse\n{\nreturn&nbsp;false;\n}\n}\nfunction&nbsp;getAllCached($sql,&nbsp;$cached&nbsp;=&nbsp;'FILEFIRST')\n{\n$cachefirst&nbsp;=&nbsp;($cached&nbsp;==&nbsp;'FILEFIRST'&nbsp;||&nbsp;($cached&nbsp;==&nbsp;'MYSQLFIRST'&nbsp;&amp;amp;&amp;amp;&nbsp;$this-&amp;gt;platform&nbsp;!=&nbsp;'WINDOWS'))&nbsp;&amp;amp;&amp;amp;&nbsp;$this-&amp;gt;max_cache_time;\nif&nbsp;(!$cachefirst)\n{\nreturn&nbsp;$this-&amp;gt;getAll($sql);\n}\nelse\n{\n$result&nbsp;=&nbsp;$this-&amp;gt;getSqlCacheData($sql,&nbsp;$cached);\nif&nbsp;(empty($result['storecache'])&nbsp;==&nbsp;true)\n{\nreturn&nbsp;$result['data'];\n}\n}\n$arr&nbsp;=&nbsp;$this-&amp;gt;getAll($sql);\nif&nbsp;($arr&nbsp;!==&nbsp;false&nbsp;&amp;amp;&amp;amp;&nbsp;$cachefirst)\n{\n$this-&amp;gt;setSqlCacheData($result,&nbsp;$arr);\n}\nreturn&nbsp;$arr;\n}\nfunction&nbsp;getRow($sql,&nbsp;$limited&nbsp;=&nbsp;false)\n{\nif&nbsp;($limited&nbsp;==&nbsp;true)\n{\n$sql&nbsp;=&nbsp;trim($sql&nbsp;.&nbsp;'&nbsp;LIMIT&nbsp;1');\n}\n$res&nbsp;=&nbsp;$this-&amp;gt;query($sql);\nif&nbsp;($res&nbsp;!==&nbsp;false)\n{\n$result&nbsp;=&nbsp;$res-&amp;gt;fetch_assoc();\n$res-&amp;gt;free();\nreturn&nbsp;$result;\n}\nelse\n{\nreturn&nbsp;false;\n}\n}\nfunction&nbsp;getRowCached($sql,&nbsp;$cached&nbsp;=&nbsp;'FILEFIRST')\n{\n$cachefirst&nbsp;=&nbsp;($cached&nbsp;==&nbsp;'FILEFIRST'&nbsp;||&nbsp;($cached&nbsp;==&nbsp;'MYSQLFIRST'&nbsp;&amp;amp;&amp;amp;&nbsp;$this-&amp;gt;platform&nbsp;!=&nbsp;'WINDOWS'))&nbsp;&amp;amp;&amp;amp;&nbsp;$this-&amp;gt;max_cache_time;\nif&nbsp;(!$cachefirst)\n{\nreturn&nbsp;$this-&amp;gt;getRow($sql,&nbsp;true);\n}\nelse\n{\n$result&nbsp;=&nbsp;$this-&amp;gt;getSqlCacheData($sql,&nbsp;$cached);\nif&nbsp;(empty($result['storecache'])&nbsp;==&nbsp;true)\n{\nreturn&nbsp;$result['data'];\n}\n}\n$arr&nbsp;=&nbsp;$this-&amp;gt;getRow($sql,&nbsp;true);\nif&nbsp;($arr&nbsp;!==&nbsp;false&nbsp;&amp;amp;&amp;amp;&nbsp;$cachefirst)\n{\n$this-&amp;gt;setSqlCacheData($result,&nbsp;$arr);\n}\nreturn&nbsp;$arr;\n}\nfunction&nbsp;getCol($sql)\n{\n$res&nbsp;=&nbsp;$this-&amp;gt;query($sql);\nif&nbsp;($res&nbsp;!==&nbsp;false)\n{\n$arr&nbsp;=&nbsp;array();\nwhile&nbsp;($row&nbsp;=&nbsp;$res-&amp;gt;fetch_row())\n{\n$arr[]&nbsp;=&nbsp;$row[0];\n}\n$res-&amp;gt;free();\nreturn&nbsp;$arr;\n}\nelse\n{\nreturn&nbsp;false;\n}\n}\nfunction&nbsp;getColCached($sql,&nbsp;$cached&nbsp;=&nbsp;'FILEFIRST')\n{\n$cachefirst&nbsp;=&nbsp;($cached&nbsp;==&nbsp;'FILEFIRST'&nbsp;||&nbsp;($cached&nbsp;==&nbsp;'MYSQLFIRST'&nbsp;&amp;amp;&amp;amp;&nbsp;$this-&amp;gt;platform&nbsp;!=&nbsp;'WINDOWS'))&nbsp;&amp;amp;&amp;amp;&nbsp;$this-&amp;gt;max_cache_time;\nif&nbsp;(!$cachefirst)\n{\nreturn&nbsp;$this-&amp;gt;getCol($sql);\n}\nelse\n{\n$result&nbsp;=&nbsp;$this-&amp;gt;getSqlCacheData($sql,&nbsp;$cached);\nif&nbsp;(empty($result['storecache'])&nbsp;==&nbsp;true)\n{\nreturn&nbsp;$result['data'];\n}\n}\n$arr&nbsp;=&nbsp;$this-&amp;gt;getCol($sql);\nif&nbsp;($arr&nbsp;!==&nbsp;false&nbsp;&amp;amp;&amp;amp;&nbsp;$cachefirst)\n{\n$this-&amp;gt;setSqlCacheData($result,&nbsp;$arr);\n}\nreturn&nbsp;$arr;\n}\nfunction&nbsp;autoExecute($table,&nbsp;$field_values,&nbsp;$mode&nbsp;=&nbsp;'INSERT',&nbsp;$where&nbsp;=&nbsp;'',&nbsp;$querymode&nbsp;=&nbsp;'')\n{\n$field_names&nbsp;=&nbsp;$this-&amp;gt;getCol('DESC&nbsp;'&nbsp;.&nbsp;$table);\n$sql&nbsp;=&nbsp;'';\nif&nbsp;($mode&nbsp;==&nbsp;'INSERT')\n{\n$fields&nbsp;=&nbsp;$values&nbsp;=&nbsp;array();\nforeach&nbsp;($field_names&nbsp;AS&nbsp;$value)\n{\nif&nbsp;(array_key_exists($value,&nbsp;$field_values)&nbsp;==&nbsp;true)\n{\n$fields[]&nbsp;=&nbsp;$value;\n$values[]&nbsp;=&nbsp;\"'\"&nbsp;.&nbsp;$field_values[$value]&nbsp;.&nbsp;\"'\";\n}\n}\nif&nbsp;(!empty($fields))\n{\n$sql&nbsp;=&nbsp;'INSERT&nbsp;INTO&nbsp;'&nbsp;.&nbsp;$table&nbsp;.&nbsp;'&nbsp;('&nbsp;.&nbsp;implode(',&nbsp;',&nbsp;$fields)&nbsp;.&nbsp;')&nbsp;VALUES&nbsp;('&nbsp;.&nbsp;implode(',&nbsp;',&nbsp;$values)&nbsp;.&nbsp;')';\n}\n}\nelse\n{\n$sets&nbsp;=&nbsp;array();\nforeach&nbsp;($field_names&nbsp;AS&nbsp;$value)\n{\nif&nbsp;(array_key_exists($value,&nbsp;$field_values)&nbsp;==&nbsp;true)\n{\n$sets[]&nbsp;=&nbsp;$value&nbsp;.&nbsp;\"&nbsp;=&nbsp;'\"&nbsp;.&nbsp;$field_values[$value]&nbsp;.&nbsp;\"'\";\n}\n}\nif&nbsp;(!empty($sets))\n{\n$sql&nbsp;=&nbsp;'UPDATE&nbsp;'&nbsp;.&nbsp;$table&nbsp;.&nbsp;'&nbsp;SET&nbsp;'&nbsp;.&nbsp;implode(',&nbsp;',&nbsp;$sets)&nbsp;.&nbsp;'&nbsp;WHERE&nbsp;'&nbsp;.&nbsp;$where;\n}\n}\nif&nbsp;($sql)\n{\nreturn&nbsp;$this-&amp;gt;query($sql,&nbsp;$querymode);\n}\nelse\n{\nreturn&nbsp;false;\n}\n}\nfunction&nbsp;autoReplace($table,&nbsp;$field_values,&nbsp;$update_values,&nbsp;$where&nbsp;=&nbsp;'',&nbsp;$querymode&nbsp;=&nbsp;'')\n{\n$field_descs&nbsp;=&nbsp;$this-&amp;gt;getAll('DESC&nbsp;'&nbsp;.&nbsp;$table);\n$primary_keys&nbsp;=&nbsp;array();\nforeach&nbsp;($field_descs&nbsp;AS&nbsp;$value)\n{\n$field_names[]&nbsp;=&nbsp;$value['Field'];\nif&nbsp;($value['Key']&nbsp;==&nbsp;'PRI')\n{\n$primary_keys[]&nbsp;=&nbsp;$value['Field'];\n}\n}\n$fields&nbsp;=&nbsp;$values&nbsp;=&nbsp;array();\nforeach&nbsp;($field_names&nbsp;AS&nbsp;$value)\n{\nif&nbsp;(array_key_exists($value,&nbsp;$field_values)&nbsp;==&nbsp;true)\n{\n$fields[]&nbsp;=&nbsp;$value;\n$values[]&nbsp;=&nbsp;\"'\"&nbsp;.&nbsp;$field_values[$value]&nbsp;.&nbsp;\"'\";\n}\n}\n$sets&nbsp;=&nbsp;array();\nforeach&nbsp;($update_values&nbsp;AS&nbsp;$key&nbsp;=&amp;gt;&nbsp;$value)\n{\nif&nbsp;(array_key_exists($key,&nbsp;$field_values)&nbsp;==&nbsp;true)\n{\nif&nbsp;(is_int($value)&nbsp;||&nbsp;is_float($value))\n{\n$sets[]&nbsp;=&nbsp;$key&nbsp;.&nbsp;'&nbsp;=&nbsp;'&nbsp;.&nbsp;$key&nbsp;.&nbsp;'&nbsp;+&nbsp;'&nbsp;.&nbsp;$value;\n}\nelse\n{\n$sets[]&nbsp;=&nbsp;$key&nbsp;.&nbsp;\"&nbsp;=&nbsp;'\"&nbsp;.&nbsp;$value&nbsp;.&nbsp;\"'\";\n}\n}\n}\n$sql&nbsp;=&nbsp;'';\nif&nbsp;(empty($primary_keys))\n{\nif&nbsp;(!empty($fields))\n{\n$sql&nbsp;=&nbsp;'INSERT&nbsp;INTO&nbsp;'&nbsp;.&nbsp;$table&nbsp;.&nbsp;'&nbsp;('&nbsp;.&nbsp;implode(',&nbsp;',&nbsp;$fields)&nbsp;.&nbsp;')&nbsp;VALUES&nbsp;('&nbsp;.&nbsp;implode(',&nbsp;',&nbsp;$values)&nbsp;.&nbsp;')';\n}\n}\nelse\n{\nif&nbsp;($this-&amp;gt;version()&nbsp;&amp;gt;=&nbsp;'4.1')\n{\nif&nbsp;(!empty($fields))\n{\n$sql&nbsp;=&nbsp;'INSERT&nbsp;INTO&nbsp;'&nbsp;.&nbsp;$table&nbsp;.&nbsp;'&nbsp;('&nbsp;.&nbsp;implode(',&nbsp;',&nbsp;$fields)&nbsp;.&nbsp;')&nbsp;VALUES&nbsp;('&nbsp;.&nbsp;implode(',&nbsp;',&nbsp;$values)&nbsp;.&nbsp;')';\nif&nbsp;(!empty($sets))\n{\n$sql&nbsp;.=&nbsp;'ON&nbsp;DUPLICATE&nbsp;KEY&nbsp;UPDATE&nbsp;'&nbsp;.&nbsp;implode(',&nbsp;',&nbsp;$sets);\n}\n}\n}\nelse\n{\nif&nbsp;(empty($where))\n{\n$where&nbsp;=&nbsp;array();\nforeach&nbsp;($primary_keys&nbsp;AS&nbsp;$value)\n{\nif&nbsp;(is_numeric($value))\n{\n$where[]&nbsp;=&nbsp;$value&nbsp;.&nbsp;'&nbsp;=&nbsp;'&nbsp;.&nbsp;$field_values[$value];\n}\nelse\n{\n$where[]&nbsp;=&nbsp;$value&nbsp;.&nbsp;\"&nbsp;=&nbsp;'\"&nbsp;.&nbsp;$field_values[$value]&nbsp;.&nbsp;\"'\";\n}\n}\n$where&nbsp;=&nbsp;implode('&nbsp;AND&nbsp;',&nbsp;$where);\n}\nif&nbsp;($where&nbsp;&amp;amp;&amp;amp;&nbsp;(!empty($sets)&nbsp;||&nbsp;!empty($fields)))\n{\nif&nbsp;(intval($this-&amp;gt;getOne(\"SELECT&nbsp;COUNT(*)&nbsp;FROM&nbsp;$table&nbsp;WHERE&nbsp;$where\"))&nbsp;&amp;gt;&nbsp;0)\n{\nif&nbsp;(!empty($sets))\n{\n$sql&nbsp;=&nbsp;'UPDATE&nbsp;'&nbsp;.&nbsp;$table&nbsp;.&nbsp;'&nbsp;SET&nbsp;'&nbsp;.&nbsp;implode(',&nbsp;',&nbsp;$sets)&nbsp;.&nbsp;'&nbsp;WHERE&nbsp;'&nbsp;.&nbsp;$where;\n}\n}\nelse\n{\nif&nbsp;(!empty($fields))\n{\n$sql&nbsp;=&nbsp;'REPLACE&nbsp;INTO&nbsp;'&nbsp;.&nbsp;$table&nbsp;.&nbsp;'&nbsp;('&nbsp;.&nbsp;implode(',&nbsp;',&nbsp;$fields)&nbsp;.&nbsp;')&nbsp;VALUES&nbsp;('&nbsp;.&nbsp;implode(',&nbsp;',&nbsp;$values)&nbsp;.&nbsp;')';\n}\n}\n}\n}\n}\nif&nbsp;($sql)\n{\nreturn&nbsp;$this-&amp;gt;query($sql,&nbsp;$querymode);\n}\nelse\n{\nreturn&nbsp;false;\n}\n}\nfunction&nbsp;setMaxCacheTime($second)\n{\n$this-&amp;gt;max_cache_time&nbsp;=&nbsp;$second;\n}\nfunction&nbsp;getMaxCacheTime()\n{\nreturn&nbsp;$this-&amp;gt;max_cache_time;\n}\nfunction&nbsp;getSqlCacheData($sql,&nbsp;$cached&nbsp;=&nbsp;'')\n{\n$sql&nbsp;=&nbsp;trim($sql);\n$result&nbsp;=&nbsp;array();\n$result['filename']&nbsp;=&nbsp;$this-&amp;gt;root_path&nbsp;.&nbsp;$this-&amp;gt;cache_data_dir&nbsp;.&nbsp;'sqlcache_'&nbsp;.&nbsp;abs(crc32($this-&amp;gt;dbhash&nbsp;.&nbsp;$sql))&nbsp;.&nbsp;'_'&nbsp;.&nbsp;md5($this-&amp;gt;dbhash&nbsp;.&nbsp;$sql)&nbsp;.&nbsp;'.php';\n$data&nbsp;=&nbsp;@file_get_contents($result['filename']);\nif&nbsp;(isset($data{23}))\n{\n$filetime&nbsp;=&nbsp;substr($data,&nbsp;13,&nbsp;10);\n$data&nbsp;=&nbsp;substr($data,&nbsp;23);\nif&nbsp;(($cached&nbsp;==&nbsp;'FILEFIRST'&nbsp;&amp;amp;&amp;amp;&nbsp;time()&nbsp;&amp;gt;&nbsp;$filetime&nbsp;+&nbsp;$this-&amp;gt;max_cache_time)&nbsp;||&nbsp;($cached&nbsp;==&nbsp;'MYSQLFIRST'&nbsp;&amp;amp;&amp;amp;&nbsp;$this-&amp;gt;table_lastupdate($this-&amp;gt;get_table_name($sql))&nbsp;&amp;gt;&nbsp;$filetime))\n{\n$result['storecache']&nbsp;=&nbsp;true;\n}\nelse\n{\n$result['data']&nbsp;=&nbsp;@unserialize($data);\nif&nbsp;($result['data']&nbsp;===&nbsp;false)\n{\n$result['storecache']&nbsp;=&nbsp;true;\n}\nelse\n{\n$result['storecache']&nbsp;=&nbsp;false;\n}\n}\n}\nelse\n{\n$result['storecache']&nbsp;=&nbsp;true;\n}\nreturn&nbsp;$result;\n}\nfunction&nbsp;setSqlCacheData($result,&nbsp;$data)\n{\nif&nbsp;($result['storecache']&nbsp;===&nbsp;true&nbsp;&amp;amp;&amp;amp;&nbsp;$result['filename'])\n{\n@file_put_contents($result['filename'],&nbsp;''&nbsp;.&nbsp;time()&nbsp;.&nbsp;serialize($data));\nclearstatcache();\n}\n}\n\/*&nbsp;\u83b7\u53d6&nbsp;SQL&nbsp;\u8bed\u53e5\u4e2d\u6700\u540e\u66f4\u65b0\u7684\u8868\u7684\u65f6\u95f4\uff0c\u6709\u591a\u4e2a\u8868\u7684\u60c5\u51b5\u4e0b\uff0c\u8fd4\u56de\u6700\u65b0\u7684\u8868\u7684\u65f6\u95f4&nbsp;*\/\nfunction&nbsp;table_lastupdate($tables)\n{\nif&nbsp;($this-&amp;gt;link_id&nbsp;===&nbsp;NULL)\n{\n$this-&amp;gt;connect($this-&amp;gt;settings['dbhost'],&nbsp;$this-&amp;gt;settings['dbuser'],&nbsp;$this-&amp;gt;settings['dbpw'],&nbsp;$this-&amp;gt;settings['dbname'],&nbsp;$this-&amp;gt;settings['charset'],&nbsp;$this-&amp;gt;settings['pconnect']);\n$this-&amp;gt;settings&nbsp;=&nbsp;array();\n}\n$lastupdatetime&nbsp;=&nbsp;'0000-00-00&nbsp;00:00:00';\n$tables&nbsp;=&nbsp;str_replace('`',&nbsp;'',&nbsp;$tables);\n$this-&amp;gt;mysql_disable_cache_tables&nbsp;=&nbsp;str_replace('`',&nbsp;'',&nbsp;$this-&amp;gt;mysql_disable_cache_tables);\nforeach&nbsp;($tables&nbsp;AS&nbsp;$table)\n{\nif&nbsp;(in_array($table,&nbsp;$this-&amp;gt;mysql_disable_cache_tables)&nbsp;==&nbsp;true)\n{\n$lastupdatetime&nbsp;=&nbsp;'2037-12-31&nbsp;23:59:59';\nbreak;\n}\nif&nbsp;(strstr($table,&nbsp;'.')&nbsp;!=&nbsp;NULL)\n{\n$tmp&nbsp;=&nbsp;explode('.',&nbsp;$table);\n$sql&nbsp;=&nbsp;'SHOW&nbsp;TABLE&nbsp;STATUS&nbsp;FROM&nbsp;`'&nbsp;.&nbsp;trim($tmp[0])&nbsp;.&nbsp;\"`&nbsp;LIKE&nbsp;'\"&nbsp;.&nbsp;trim($tmp[1])&nbsp;.&nbsp;\"'\";\n}\nelse\n{\n$sql&nbsp;=&nbsp;\"SHOW&nbsp;TABLE&nbsp;STATUS&nbsp;LIKE&nbsp;'\"&nbsp;.&nbsp;trim($table)&nbsp;.&nbsp;\"'\";\n}\n$result&nbsp;=&nbsp;$this-&amp;gt;link_id-&amp;gt;query($sql);\n$row&nbsp;=&nbsp;$result-&amp;gt;fetch_assoc();\nif&nbsp;($row['Update_time']&nbsp;&amp;gt;&nbsp;$lastupdatetime)\n{\n$lastupdatetime&nbsp;=&nbsp;$row['Update_time'];\n}\n}\n$lastupdatetime&nbsp;=&nbsp;strtotime($lastupdatetime)&nbsp;-&nbsp;$this-&amp;gt;timezone&nbsp;+&nbsp;$this-&amp;gt;timeline;\nreturn&nbsp;$lastupdatetime;\n}\nfunction&nbsp;get_table_name($query_item)\n{\n$query_item&nbsp;=&nbsp;trim($query_item);\n$table_names&nbsp;=&nbsp;array();\n\/*&nbsp;\u5224\u65ad\u8bed\u53e5\u4e2d\u662f\u4e0d\u662f\u542b\u6709&nbsp;JOIN&nbsp;*\/\nif&nbsp;(stristr($query_item,&nbsp;'&nbsp;JOIN&nbsp;')&nbsp;==&nbsp;'')\n{\n\/*&nbsp;\u89e3\u6790\u4e00\u822c\u7684&nbsp;SELECT&nbsp;FROM&nbsp;\u8bed\u53e5&nbsp;*\/\nif&nbsp;(preg_match('\/^SELECT.*?FROMs*((?:`?w+`?s*.s*)?`?w+`?(?:(?:s*AS)?s*`?w+`?)?(?:s*,s*(?:`?w+`?s*.s*)?`?w+`?(?:(?:s*AS)?s*`?w+`?)?)*)\/is',&nbsp;$query_item,&nbsp;$table_names))\n{\n$table_names&nbsp;=&nbsp;preg_replace('\/((?:`?w+`?s*.s*)?`?w+`?)[^,]*\/',&nbsp;'',&nbsp;$table_names[1]);\nreturn&nbsp;preg_split('\/s*,s*\/',&nbsp;$table_names);\n}\n}\nelse\n{\n\/*&nbsp;\u5bf9\u542b\u6709&nbsp;JOIN&nbsp;\u7684\u8bed\u53e5\u8fdb\u884c\u89e3\u6790&nbsp;*\/\nif&nbsp;(preg_match('\/^SELECT.*?FROMs*((?:`?w+`?s*.s*)?`?w+`?)(?:(?:s*AS)?s*`?w+`?)?.*?JOIN.*$\/is',&nbsp;$query_item,&nbsp;$table_names))\n{\n$other_table_names&nbsp;=&nbsp;array();\npreg_match_all('\/JOINs*((?:`?w+`?s*.s*)?`?w+`?)s*\/i',&nbsp;$query_item,&nbsp;$other_table_names);\nreturn&nbsp;array_merge(array($table_names[1]),&nbsp;$other_table_names[1]);\n}\n}\nreturn&nbsp;$table_names;\n}\n\/*&nbsp;\u8bbe\u7f6e\u4e0d\u5141\u8bb8\u8fdb\u884c\u7f13\u5b58\u7684\u8868&nbsp;*\/\nfunction&nbsp;set_disable_cache_tables($tables)\n{\nif&nbsp;(!is_array($tables))\n{\n$tables&nbsp;=&nbsp;explode(',',&nbsp;$tables);\n}\nforeach&nbsp;($tables&nbsp;AS&nbsp;$table)\n{\n$this-&amp;gt;mysql_disable_cache_tables[]&nbsp;=&nbsp;$table;\n}\narray_unique($this-&amp;gt;mysql_disable_cache_tables);\n}\n\/**\n+----------------------------------------------------------\n*&nbsp;\u542f\u52a8\u4e8b\u52a1\n+----------------------------------------------------------\n*&nbsp;@access&nbsp;public\n+----------------------------------------------------------\n*&nbsp;@return&nbsp;void\n+----------------------------------------------------------\n*\/\npublic&nbsp;function&nbsp;startTrans()&nbsp;{\n\/\/$this-&amp;gt;initConnect(true);\nif&nbsp;(&nbsp;!$this-&amp;gt;link_id&nbsp;)&nbsp;return&nbsp;false;\n\/\/\u6570\u636erollback&nbsp;\u652f\u6301\nif&nbsp;($this-&amp;gt;transTimes&nbsp;==&nbsp;0)&nbsp;{\n$this-&amp;gt;link_id-&amp;gt;autocommit(FALSE);\n}\n$this-&amp;gt;transTimes++;\nreturn&nbsp;;\n}\n\/**\n+----------------------------------------------------------\n*&nbsp;\u7528\u4e8e\u975e\u81ea\u52a8\u63d0\u4ea4\u72b6\u6001\u4e0b\u9762\u7684\u67e5\u8be2\u63d0\u4ea4\n+----------------------------------------------------------\n*&nbsp;@access&nbsp;public\n+----------------------------------------------------------\n*&nbsp;@return&nbsp;boolen\n+----------------------------------------------------------\n*\/\npublic&nbsp;function&nbsp;commit()\n{\nif&nbsp;($this-&amp;gt;transTimes&nbsp;&amp;gt;&nbsp;0)&nbsp;{\n$result&nbsp;=&nbsp;$this-&amp;gt;link_id-&amp;gt;commit();\n$this-&amp;gt;transTimes&nbsp;=&nbsp;0;\nif(!$result){\n$this-&amp;gt;error_message[]['message']&nbsp;=&nbsp;'MySQL&nbsp;Query&nbsp;Error';\n$this-&amp;gt;error_message[]['sql']&nbsp;=&nbsp;$sql;\n$this-&amp;gt;error_message[]['error']&nbsp;=&nbsp;$this-&amp;gt;link_id-&amp;gt;error;\n$this-&amp;gt;error_message[]['errno']&nbsp;=&nbsp;$this-&amp;gt;link_id-&amp;gt;errno;\n$this-&amp;gt;ErrorMsg();\nreturn&nbsp;false;\n}\n}\nreturn&nbsp;true;\n}\n\/**\n+----------------------------------------------------------\n*&nbsp;\u4e8b\u52a1\u56de\u6eda\n+----------------------------------------------------------\n*&nbsp;@access&nbsp;public\n+----------------------------------------------------------\n*&nbsp;@return&nbsp;boolen\n+----------------------------------------------------------\n*\/\npublic&nbsp;function&nbsp;rollback()\n{\nif&nbsp;($this-&amp;gt;transTimes&nbsp;&amp;gt;&nbsp;0)&nbsp;{\n$result&nbsp;=&nbsp;$this-&amp;gt;link_id-&amp;gt;rollback();\n$this-&amp;gt;transTimes&nbsp;=&nbsp;0;\nif(!$result){\n$this-&amp;gt;error_message[]['message']&nbsp;=&nbsp;'MySQL&nbsp;Query&nbsp;Error';\n$this-&amp;gt;error_message[]['sql']&nbsp;=&nbsp;$sql;\n$this-&amp;gt;error_message[]['error']&nbsp;=&nbsp;$this-&amp;gt;link_id-&amp;gt;error;\n$this-&amp;gt;error_message[]['errno']&nbsp;=&nbsp;$this-&amp;gt;link_id-&amp;gt;errno;\n$this-&amp;gt;ErrorMsg();\nreturn&nbsp;false;\n}\n}\nreturn&nbsp;true;\n}\n}<\/pre>\n<p> \u767b\u5f55\u540e\u590d\u5236 <\/p>\n<p>\u4ee3\u7801\u5f53\u4e2d\u52a0\u4e86\u51e0\u4e2a\u65b9\u6cd5\uff0c\u7528\u4e8e\u652f\u6301\u4e8b\u52a1\u3002<\/p>\n<p>\uff082\uff09\u66f4\u6539cls_image.php\u7684gd_version()\u65b9\u6cd5\uff0c\u5c06\u8fd9\u4e2a\u65b9\u6cd5\u6539\u4e3a\u9759\u6001\u65b9\u6cd5\uff0c\u5e76\u4e14\u6240\u6709\u8c03\u7528\u6b64\u65b9\u6cd5\u7684\u5730\u65b9\uff0c\u90fd\u6539\u4e3a\u9759\u6001\u8c03\u7528\u3002<\/p>\n<p>PHP5.6\u5f00\u59cb\uff0c\u5df2\u7ecf\u4e0d\u652f\u6301\u4e0d\u517c\u5bb9\u7684\u4e0a\u4e0b\u6587\u8c03\u7528\u65b9\u6cd5\uff0c\u5e76\u4e14\u4ea7\u751f E_DEPRECATED \u9519\u8bef\uff08\u4ee5\u524d\u662f E_STRICT\uff09\u3002<\/p>\n<p>\u66f4\u6539\u5982\u4e0b\uff1a<\/p>\n<pre>includes\/cls_images.php\uff0c(gd_version\u65b9\u6cd5\u4f53\u6dfb\u52a0static\u5173\u952e\u5b57\uff09\n\/**\n*&nbsp;\u83b7\u5f97\u670d\u52a1\u5668\u4e0a\u7684&nbsp;GD&nbsp;\u7248\u672c\n*\n*&nbsp;@access&nbsp;public\n*&nbsp;@return&nbsp;int&nbsp;\u53ef\u80fd\u7684\u503c\u4e3a0\uff0c1\uff0c2\n*\/\nstatic&nbsp;function&nbsp;gd_version()\n{\n....\n}<\/pre>\n<p> \u767b\u5f55\u540e\u590d\u5236 <\/p>\n<p>\u5728\u597d\u51e0\u5904\u8c03\u7528\u6b64\u65b9\u6cd5\u7684\u5730\u65b9\u90fd\u6539\u4e3a\u9759\u6001\u8c03\u7528\uff0c\u6bd4\u5982includes\/cls_images.php\u7684\u597d\u51e0\u4e2a\u65b9\u6cd5\u5728\u8c03\u7528\u65f6\u4f7f\u7528\u7c7b\u5bf9\u8c61\u8c03\u7528\uff1a<\/p>\n<pre>function&nbsp;make_thumb($img,&nbsp;$thumb_width&nbsp;=&nbsp;0,&nbsp;$thumb_height&nbsp;=&nbsp;0,&nbsp;$path&nbsp;=&nbsp;'',&nbsp;$bgcolor='')\n{\n$gd&nbsp;=&nbsp;$this-&amp;gt;gd_version();&nbsp;\/\/\u83b7\u53d6&nbsp;GD&nbsp;\u7248\u672c\u30020&nbsp;\u8868\u793a\u6ca1\u6709&nbsp;GD&nbsp;\u5e93\uff0c1&nbsp;\u8868\u793a&nbsp;GD&nbsp;1.x\uff0c2&nbsp;\u8868\u793a&nbsp;GD&nbsp;2.x\n\u3002\u3002\u3002\n}<\/pre>\n<p> \u767b\u5f55\u540e\u590d\u5236 <\/p>\n<p>\u5c06\u5176\u6539\u4e3a\uff1a<\/p>\n<pre>function&nbsp;make_thumb($img,&nbsp;$thumb_width&nbsp;=&nbsp;0,&nbsp;$thumb_height&nbsp;=&nbsp;0,&nbsp;$path&nbsp;=&nbsp;'',&nbsp;$bgcolor='')\n{\n$gd&nbsp;=&nbsp;self::gd_version();&nbsp;\/\/\u83b7\u53d6&nbsp;GD&nbsp;\u7248\u672c\u30020&nbsp;\u8868\u793a\u6ca1\u6709&nbsp;GD&nbsp;\u5e93\uff0c1&nbsp;\u8868\u793a&nbsp;GD&nbsp;1.x\uff0c2&nbsp;\u8868\u793a&nbsp;GD&nbsp;2.x\n\u3002\u3002\u3002\n}<\/pre>\n<p> \u767b\u5f55\u540e\u590d\u5236 <\/p>\n<p>\u8fd8\u6709includes\/lib_base.php\u6587\u4ef6\u7684gd_version\u51fd\u6570\uff0c\u6539\u4e3a\uff1a<\/p>\n<pre>function&nbsp;gd_version()\n{\ninclude_once(ROOT_PATH&nbsp;.&nbsp;'includes\/cls_image.php');\nreturn&nbsp;cls_image::gd_version();\n}<\/pre>\n<p> \u767b\u5f55\u540e\u590d\u5236 <\/p>\n<p>\u5176\u4ed6\u6587\u4ef6\u4ee3\u7801\u5728\u8c03\u7528\u65f6\uff0c\u6700\u597d\u6539\u4e3a\u8c03\u7528lib_base\u6587\u4ef6\u7684gd_version\u7684\u51fd\u6570\u3002\u53ef\u4ee5\u641c\u7d22\u66f4\u6539\u3002<\/p>\n<p>\uff083\uff09\u66f4\u6539includes\/lib_main.php\u6587\u4ef6\u7684get_dyna_libs\u51fd\u6570\uff0c\u8be5\u7b2c\u4e00\u884c\u7684\u4ee3\u7801\uff1a<\/p>\n<pre>function&nbsp;get_dyna_libs($theme,&nbsp;$tmp)\n{\n$ext&nbsp;=&nbsp;end(explode('.',&nbsp;$tmp));\n\u3002\u3002\u3002\n}<\/pre>\n<p> \u767b\u5f55\u540e\u590d\u5236 <\/p>\n<p>\u66f4\u6539\u4e3a\uff1a<\/p>\n<pre>function&nbsp;get_dyna_libs($theme,&nbsp;$tmp)\n{\n$tmp_ext&nbsp;=&nbsp;explode('.',&nbsp;$tmp);\n$ext&nbsp;=&nbsp;end($tmp_ext);\n}<\/pre>\n<p> \u767b\u5f55\u540e\u590d\u5236 <\/p>\n<p>end\u65b9\u6cd5\u7684\u63a5\u53d7\u7684\u53c2\u6570\u5fc5\u987b\u662f\u5f15\u7528\u4f20\u9012\u503c\uff0c\u8fd9\u91cc\u4f7f\u7528\u4e86explode\u65b9\u6cd5\u8fd4\u56de\u503c\uff0c\u4e0d\u53ef\u4ee5\u76f4\u63a5\u5957\u7528\u3002<\/p>\n<p>\uff084\uff09includes\/cls_template.php\u4ee3\u7801\uff1a<\/p>\n<p>preg_replace\u65b9\u6cd5\uff0c\u81eaPHP5.5\u5f00\u59cb \/e\u4fee\u9970\u7b26\u5df2\u7ecf\u5e9f\u5f03\uff0c\u6240\u4ee5\u8981\u4f7f\u7528preg_replace_callback\u4ee3\u66ff\u3002\u6b64\u4ee3\u66ff\u6709\u591a\u5904:<\/p>\n<p>fetch_str\u65b9\u6cd5\uff1a<\/p>\n<pre>fetch_str($source)\n{\n\u3002\u3002\u3002\nreturn&nbsp;preg_replace_callback(\"\/{([^}{\n]*)}\/\",'self::select_replace',&nbsp;$source);\n}\n\/\/\u65b0\u589e\u7684\u65b9\u6cd5\nprivate&nbsp;function&nbsp;select_replace($matches){\nreturn&nbsp;$this-&amp;gt;select($matches[1]);\n}<\/pre>\n<p> \u767b\u5f55\u540e\u590d\u5236 <\/p>\n<p>select\u65b9\u6cd5\uff1a<\/p>\n<pre>function&nbsp;select($tag)\n{\n\u3002\u3002\u3002\n$pregReplace&nbsp;=&nbsp;preg_replace_callback(\"\/('\\$[^,]+)\/\"&nbsp;,&nbsp;function($matches){\nreturn&nbsp;stripslashes(trim($matches[1],'''));\n},&nbsp;var_export($t,&nbsp;true));\n\u3002\u3002\u3002\n}\nsmarty_prefilter_preCompile\u65b9\u6cd5\uff1a\n$source&nbsp;=&nbsp;preg_replace_callback($pattern,&nbsp;function($matches){\nreturn&nbsp;'{include&nbsp;file='.strtolower($matches[1]).&nbsp;'}';\n},&nbsp;$source);<\/pre>\n<p> \u767b\u5f55\u540e\u590d\u5236 <\/p>\n<p>\uff085\uff09\u5c06\u6240\u6709\u7c7b\u7684\u6784\u9020\u51fd\u6570\uff0c\u90fd\u53bb\u9664\u4f7f\u7528\u7c7b\u540d\u7684\u6784\u9020\u51fd\u6570\uff0c\u4fdd\u7559__construct()\uff1a<\/p>\n<p>\u6d89\u53ca\u6b64\u6539\u52a8\u7684\u8d85\u591a\uff0c\u7528\u641c\u7d22\u4e00\u4e00\u627e\u5230\u5e76\u6539\u52a8\u5427\u2026\u2026\u8fd9\u4e2a\u5c31\u4e0d\u5217\u4e3e\u4e86\u3002<\/p>\n<p>\u4ee5\u4e0a\u5c31\u662fecshop\u5982\u4f55\u4fee\u6539\u5e76\u652f\u6301PHP7\u7684\u8be6\u7ec6\u5185\u5bb9\uff0c\u66f4\u591a\u8bf7\u5173\u6ce8\u7c73\u4e91\u5176\u5b83\u76f8\u5173\u6587\u7ae0\uff01<\/p>\n","protected":false},"excerpt":{"rendered":"<p>ecshop\u4fee\u6539php\u7684\u65b9\u6cd5\uff1a\u9996\u5148\u5c06mysql\u6269\u5c55\u7684\u4f7f\u7528\u66ff\u6362\u6389\uff0c\u6539\u4e3a\u4f7f\u7528mysqli\u6216pdo\uff1b\u7136\u540e\u66f4\u6539\u201ccls_image.php\u201d\u7684\u201cgd_version()\u201d\u65b9\u6cd5\uff0c\u5c06\u8fd9\u4e2a\u65b9\u6cd5\u6539\u4e3a\u9759\u6001\u65b9\u6cd5\uff1b\u6700\u540e\u53bb\u9664\u4f7f\u7528\u7c7b\u540d\u7684\u6784\u9020\u51fd\u6570\u3002 ecshop\u652f\u6301PHP7\u7684\u4fee\u6539\u65b9\u6cd5 \uff081\uff09\u5c06mysql\u6269\u5c55\u7684\u4f7f\u7528\u66ff\u6362\u6389\uff0c\u6539\u4e3a\u4f7f\u7528mysqli\u6216pdo\uff08\u63a8\u8350\u4f7f\u7528mysqli\uff09\uff1a \u63a8\u8350\uff1a\u300a\u300b \u4ecephp5.5\u5f00\u59cb\uff0cmysql\u6269\u5c55\u5c06\u5e9f\u5f03\u4e86\u3002 \u5177\u4f53\u66f4\u6539\u7684\u6587\u4ef6\u5728\u4e8eincludes\/cls_mysql.php\u3002\u8fd9\u662f\u4e2a\u4e0d\u5c0f\u7684\u5de5\u7a0b\uff0c\u6587\u4ef6\u4ee3\u7801\u592a\u957f\u2026\u2026 \u7acb\u5373\u5b66\u4e60\u201c\u201d\uff1b if&nbsp;(!defined(&#8216;DITAN_ECS&#8217;)) { die(&#8216;Hacking&nbsp;attempt&#8217;); } class&nbsp;cls_mysql { var&nbsp;$link_id&nbsp;=&nbsp;NULL; var&nbsp;$settings&nbsp;=&nbsp;array(); var&nbsp;$queryCount&nbsp;=&nbsp;0; var&nbsp;$queryTime&nbsp;=&nbsp;&#8221;; var&nbsp;$queryLog&nbsp;=&nbsp;array(); var&nbsp;$max_cache_time&nbsp;=&nbsp;300;&nbsp;\/\/&nbsp;\u6700\u5927\u7684\u7f13\u5b58\u65f6\u95f4\uff0c\u4ee5\u79d2\u4e3a\u5355\u4f4d var&nbsp;$cache_data_dir&nbsp;=&nbsp;&#8216;temp\/query_caches\/&#8217;; var&nbsp;$root_path&nbsp;=&nbsp;&#8221;; var&nbsp;$error_message&nbsp;=&nbsp;array(); var&nbsp;$platform&nbsp;=&nbsp;&#8221;; var&nbsp;$version&nbsp;=&nbsp;&#8221;; var&nbsp;$dbhash&nbsp;=&nbsp;&#8221;; var&nbsp;$starttime&nbsp;=&nbsp;0; var&nbsp;$timeline&nbsp;=&nbsp;0; var&nbsp;$timezone&nbsp;=&nbsp;0; \/\/&nbsp;\u4e8b\u52a1\u6307\u4ee4\u6570 protected&nbsp;$transTimes&nbsp;=&nbsp;0; var&nbsp;$mysql_config_cache_file_time&nbsp;=&nbsp;0; var&nbsp;$mysql_disable_cache_tables&nbsp;=&nbsp;array();&nbsp;\/\/&nbsp;\u4e0d\u5141\u8bb8\u88ab\u7f13\u5b58\u7684\u8868\uff0c\u9047\u5230\u5c06\u4e0d\u4f1a\u8fdb\u884c\u7f13\u5b58 function&nbsp;__construct($dbhost,&nbsp;$dbuser,&nbsp;$dbpw,&nbsp;$dbname&nbsp;=&nbsp;&#8221;,&nbsp;$charset&nbsp;=&nbsp;&#8216;gbk&#8217;,&nbsp;$pconnect&nbsp;=&nbsp;0,&nbsp;$quiet&nbsp;=&nbsp;0) { $this-&amp;gt;cls_mysql($dbhost,&nbsp;$dbuser,&nbsp;$dbpw,&nbsp;$dbname,&nbsp;$charset,&nbsp;$pconnect,&nbsp;$quiet); } function&nbsp;cls_mysql($dbhost,&nbsp;$dbuser,&nbsp;$dbpw,&nbsp;$dbname&nbsp;=&nbsp;&#8221;,&nbsp;$charset&nbsp;=&nbsp;&#8216;gbk&#8217;,&nbsp;$pconnect&nbsp;=&nbsp;0,&nbsp;$quiet&nbsp;=&nbsp;0) { if&nbsp;(defined(&#8216;EC_CHARSET&#8217;)) { $charset&nbsp;=&nbsp;strtolower(str_replace(&#8216;-&#8216;,&nbsp;&#8221;,&nbsp;EC_CHARSET)); } if&nbsp;(defined(&#8216;ROOT_PATH&#8217;)&nbsp;&amp;amp;&amp;amp;&nbsp;!$this-&amp;gt;root_path) { $this-&amp;gt;root_path&nbsp;=&nbsp;ROOT_PATH; } if&nbsp;($quiet) { $this-&amp;gt;connect($dbhost,&nbsp;$dbuser,&nbsp;$dbpw,&nbsp;$dbname,&nbsp;$charset,&nbsp;$pconnect,&nbsp;$quiet); } else { $this-&amp;gt;settings&nbsp;=&nbsp;array( &#8216;dbhost&#8217;&nbsp;=&amp;gt;&nbsp;$dbhost, &#8216;dbuser&#8217;&nbsp;=&amp;gt;&nbsp;$dbuser, [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[18],"tags":[],"class_list":["post-31630","post","type-post","status-publish","format-standard","hentry","category-cms"],"_links":{"self":[{"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/posts\/31630","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/comments?post=31630"}],"version-history":[{"count":0,"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/posts\/31630\/revisions"}],"wp:attachment":[{"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/media?parent=31630"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/categories?post=31630"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/tags?post=31630"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}