'gbk', 'gbk' => 'utf-8'); $convert_tables_file = 'data/convert_tables.php'; $rpp = 500; // 姣忔?澶勭悊鐨勮?褰曟暟 /* ECShop鐨勭珯鐐圭洰褰 */ define('ROOT_PATH', str_replace('\\', '/', substr(__FILE__, 0, -19))); define('IN_ECS', true); require(ROOT_PATH . 'data/config.php'); require(ROOT_PATH . 'includes/cls_ecshop.php'); require(ROOT_PATH . 'includes/cls_mysql.php'); require(ROOT_PATH . 'includes/lib_common.php'); require(ROOT_PATH . 'includes/lib_base.php'); /* 鏈?崌绾у墠锛岃?甯搁噺涓嶅瓨鍦 */ if (defined('EC_CHARSET')) { $ec_charset = EC_CHARSET; } else { $ec_charset = ''; } $ecshop_version = str_replace('v', '', VERSION); $ecshop_charset = $ec_charset; $db = new cls_mysql($db_host, $db_user, $db_pass, $db_name, '', 0, 1); $mysql_version = $db->version; $mysql_charset = get_mysql_charset(); $step = getgpc('step'); $step = empty($step) ? 1 : $step; if ($ecshop_version < '2.6.0') { $step = 'halt'; } ob_start(); instheader(); if ($step == 1) { if (!empty($ecshop_charset) && !empty($mysql_charset) && $ecshop_charset == $mysql_charset) { $ext_msg = '鎮ㄧ殑绋嬪簭缂栫爜涓庢暟鎹?簱缂栫爜涓€鑷达紝鏃犻渶杩涜?杞?崲銆侟/span>
>> 濡傛灉鎮ㄩ渶瑕佹墽琛屽崌绾х▼搴忥紝璇风偣杩欓噷杩涜?鍗囩骇'; } elseif(empty($ecshop_charset) && !empty($mysql_charset)) { $ext_msg = '
鐢变簬鏈?兘纭?畾鎮ㄧ殑绋嬪簭缂栫爜锛岃?缂栫爜鐢辨偍鎵嬪姩纭?畾銆侟/b>
鎮ㄧ殑鏁版嵁搴撶紪鐮佷负锛欬span style="color:blue">'. $mysql_charset .' 锛岀‘璁ゆ偍鐨勭▼搴忕紪鐮佹槸锛欬span style="color:red">'. $convert_charset[$mysql_charset] .' 鎵嶈兘杩涜?杞?崲

>> 濡傛灉鎮ㄥ凡纭??瀹屾垚涓婇潰鐨勮?鏄?璇风偣杩欓噷杩涜?杞?崲    >> 濡傛灉鎮ㄧ‘璁ょ▼搴忎笌鏁版嵁搴撶殑缂栫爜涓€鑷达紝璇风偣杩欓噷杩涜?鍗囩骇'; $ecshop_charset = '鏈?煡'; } elseif(empty($mysql_charset) && !empty($ecshop_charset)) { $ext_msg = '
鐢变簬鏈?兘纭?畾鎮ㄧ殑鏁版嵁搴撶紪鐮侊紝璇ョ紪鐮佺敱鎮ㄦ墜鍔ㄧ‘瀹氥€侟/b>
鎮ㄧ殑绋嬪簭缂栫爜涓猴細'. $ecshop_charset .' 锛岀‘璁ゆ偍鐨勬暟鎹?簱缂栫爜鏄?細'. $convert_charset[$ecshop_charset] .' 鎵嶈兘杩涜?杞?崲

>> 濡傛灉鎮ㄥ凡纭??瀹屾垚涓婇潰鐨勮?鏄?璇风偣杩欓噷杩涜?杞?崲    >> 濡傛灉鎮ㄧ‘璁ょ▼搴忎笌鏁版嵁搴撶殑缂栫爜涓€鑷达紝璇风偣杩欓噷杩涜?鍗囩骇'; $mysql_charset = '鏈?煡'; } elseif(empty($ecshop_charset) && empty($mysql_charset)) { $charset_option = ''; foreach($convert_charset as $c_charset) { $charset_option .= ''; } $ext_msg = '
鐢变簬鏈?兘纭?畾鎮ㄧ殑绋嬪簭涓庢暟鎹?簱缂栫爜锛岃?缂栫爜鐢辨偍鎵嬪姩纭?畾銆侟/b>
鎮ㄧ殑绋嬪簭缂栫爜涓猴細 锛屾偍鐨勬暟鎹?簱缂栫爜涓猴細


>> 濡傛灉鎮ㄥ凡纭??瀹屾垚涓婇潰鐨勮?鏄?璇风偣杩欓噷杩涜?杞?崲    >> 濡傛灉鎮ㄧ‘璁ょ▼搴忎笌鏁版嵁搴撶殑缂栫爜涓€鑷达紝璇风偣杩欓噷杩涜?鍗囩骇'; $mysql_charset = '鏈?煡'; $ecshop_charset = '鏈?煡'; }else { $ext_msg ='>> 濡傛灉鎮ㄥ凡纭??瀹屾垚涓婇潰鐨勮?鏄?璇风偣杩欓噷杩涜?杞?崲'; } $ext_msg .= ' '; echo <<鏈?浆鎹㈢▼搴忓彧鑳介拡ECShop2.6.0鎴栬€呬互涓婄増鏈?▼搴忕殑杞?崲
杞?崲涔嬪墠鍔″繀澶囦唤鏁版嵁搴撹祫鏂橖/b>锛岄伩鍏嶈浆鎹㈠け璐ョ粰鎮ㄥ甫鏉ユ崯澶变笌涓嶄究

杞?崲绋嬪簭浣跨敤璇存槑锛欬/p>

  1. 鍙?敮鎸丒CShop鏁版嵁搴撶殑杞?崲
  2. 鏍规嵁鎮ㄤ笂浼犵▼搴忕殑缂栫爜鑷?姩杞?崲鏁版嵁搴撶紪鐮侊紝鐜板湪鍙?敮鎸 UTF-8 涓 GBK 缂栫爜鐨勪簰鎹?€
  3. 鏈?伐鍏峰湪鎵ц?杩囩▼涓?笉浼氬?鎮ㄧ殑鍘熸暟鎹?簱杩涜?鐮村潖锛屼細灏嗘偍鐨勫師鏁版嵁琛ㄥ懡鍚嶄负澶囦唤鏂囦欢锛岃浆鎹㈠悗鐨勬暟鎹?瓨鍦ㄥ師鏉ョ殑琛ㄦ槑涓?€備緥濡傦細鍘熻〃鍚嶄负members锛堢紪鐮佷负UTF-8锛夐渶瑕佽浆涓篏BK缂栫爜锛屽垯杞?崲鍚庝负members锛堢紪鐮佷负GBK锛夛紝members_bak锛堢紪鐮佷负UTF-8锛屽嵆涓哄師琛ㄧ殑澶囦唤锛夈€
  4. 濡傛灉涓?€斿け璐ワ紝璇锋仮澶嶆暟鎹?簱鐨勫埌鍘熷?浠芥暟鎹?簱锛屽幓闄ら敊璇?悗閲嶆柊杩愯?鏈?▼搴
  5. 杩涜?璇ユ搷鍋氬墠璇蜂竴瀹氬?浠芥偍鐨勬暟鎹?簱锛岃?杞?崲鍙?兘杩涜?涓€娆★紝濡傛灉杞?崲澶辫触璇蜂娇鐢ㄦ偍鐨勬暟鎹?簱澶囦唤杩樺師鏁版嵁搴撳悗閲嶆柊杩涜?杞?崲銆侟/span>

鎮ㄥ綋鍓嶇▼搴忎笌鏁版嵁搴撶殑淇℃伅锛欬/p>

  • 绋嬪簭鐗堟湰锛?ecshop_version
  • 绋嬪簭缂栫爜锛?ecshop_charset
  • MySQL鐗堟湰锛?mysql_version
  • MySQL缂栫爜锛?mysql_charset
$ext_msg EOT; instfooter(); } elseif ($step == 'halt') { echo <<

鎮ㄥ綋鍓嶇殑绋嬪簭鐗堟湰灏忎簬2.6.0 锛岃?鍏堟洿鏂版偍鐨勭▼搴忓啀杩涜?杞?崲銆侟/h4>


EOT; instfooter(); } elseif ($step == 'start') { $ecshop_charset = isset($_POST['ecshop_charset'])? $_POST['ecshop_charset'] : $ecshop_charset; $mysql_charset = isset($_POST['mysql_charset'])? $_POST['mysql_charset'] : $mysql_charset; if ($ecshop_charset == $mysql_charset) { $ext_msg = '鎮ㄧ殑绋嬪簭缂栫爜涓庢暟鎹?簱缂栫爜涓€鑷达紝鏃犻渶杩涜?杞?崲銆侟/span>
>> 濡傛灉鎮ㄩ渶瑕佹墽琛屽崌绾х▼搴忥紝璇风偣杩欓噷杩涜?鍗囩骇'; showmessage($ext_msg); } $act = getgpc('act', 'P'); if (init_convert_tables($convert_tables_file)) { include( ROOT_PATH . $convert_tables_file); } else { showmessage('娌℃湁鏁版嵁琛ㄥ彲浠ヨ浆鎹↑/span>'); } $tables_keys = array_keys($convert_tables); if (empty($act)) { $backup_count = backup_tables($tables_keys); $extra = ' '; showmessage("鏁版嵁搴撳?浠藉畬鎴愶紝".$backup_count." 涓?師鏁版嵁琛ㄥ潎閲嶅懡鍚嶄负浠 _bak 涓哄悗缂€锛?, '?step=start', 'form', $extra ); } else { convert_table(getgpc('table_name', 'P')); } } ob_end_flush(); function instheader() { global $charset, $tools_version; echo "". "". "ECShop 鏁版嵁搴撶紪鐮佽浆鎹㈠伐鍏?tools_version". " ". "
". "
". "". "". "
>> ECShop 鏁版嵁搴撶紪鐮佽浆鎹㈠伐鍏?tools_version". "

"; } function instfooter() { echo "

". "Powered by ECShop". "  © 2005-2011 涓婃捣鍟嗘淳缃戠粶绉戞妧鏈夐檺鍏?徃銆侟br />
". "
". ""; } function showmessage($message, $url_forward = '', $msgtype = 'message', $extra = '', $delaymsec = 1000) { //浠ヨ〃鍗曠殑褰㈠紡鏄剧ず淇℃伅 if($msgtype == 'form') { $message = "
". "

$message

\n $extra

". ''; } else { if($url_forward) { $message .= ""; $message .= "
"; } else { $message .= "


"; } $message = "
$message$extra

"; } echo $message; instfooter(); exit; } function display($msg) { echo '
'.$msg.'
'; } function get_mysql_charset() { global $db, $prefix; $tmp_charset = ''; $query = $db->query("SHOW CREATE TABLE `{$prefix}users`", 'SILENT'); if ($query) { $tablestruct = $db->fetch_array($query, MYSQL_NUM); preg_match("/CHARSET=(\w+)/", $tablestruct[1], $m); if (!empty($m)){ if (strpos($m[1], 'utf') === 0) { $tmp_charset = str_replace('utf', 'utf-', $m[1]); } else { $tmp_charset = $m[1]; } } } return $tmp_charset; } function getgpc($k, $var='G') { switch($var) { case 'G': $var = &$_GET; break; case 'P': $var = &$_POST; break; case 'C': $var = &$_COOKIE; break; case 'R': $var = &$_REQUEST; break; } return isset($var[$k]) ? $var[$k] : NULL; } function init_convert_tables($file) { if (is_file(ROOT_PATH . $file)) { return true; } global $db, $prefix; $tables = array(); $query = $db->query('SHOW TABLE STATUS'); while($result = $db->fetch_array($query)) { if (empty($prefix) || (!empty($prefix) && strpos($result['Name'], $prefix) === 0)) { //妫€鏌ヤ笉鑳芥湁浠 _bak 缁撳熬鐨勮〃 if (preg_match('/_bak$/', $result['Name'])) { showmessage('鎮ㄧ殑鏁版嵁搴撳凡缁忓仛杩囪?瑷€缂栫爜杞?崲锛屽?闇€閲嶆柊杞?崲璇峰厛杩樺師鏁版嵁搴撳悗鍐嶆?鎵ц?鏈?▼搴忥紒'); } $tables[$result['Name']] = 0; } } if (!empty($tables)) { $str = ""; file_put_contents(ROOT_PATH.$file, $str); return true; } return false; } function write_tables($tables, $file, $var_name) { if (!empty($tables)) { $str = ""; file_put_contents(ROOT_PATH.$file, $str); return true; } } function backup_tables($tables) { global $db; global $convert_tables, $convert_tables_file; $suffix = '_bak'; $backup_count = 0; display('姝e湪杩涜?澶囦唤鏁版嵁琛?); if (!empty($tables)) { foreach($tables as $tablename) { $db->query("DROP TABLE IF EXISTS `{$tablename}{$suffix}`;", 'SILENT'); $rename_sql = "RENAME TABLE `$tablename` TO `{$tablename}{$suffix}`;"; if ($db->query($rename_sql, 'SILENT')) { $backup_count++; $convert_tables[$tablename] = 1; } } write_tables($convert_tables, $convert_tables_file, 'convert_tables'); return $backup_count; } return 0; } function convert_table($table) { if (empty($table)) { showmessage('鏁版嵁琛ㄥ悕涓嶈兘涓虹┖锛岃浆鎹?腑姝?紝濡傞渶閲嶆柊杞?崲璇峰厛杩樺師鏁版嵁搴撳悗鍐嶆?鎵ц?鏈?▼搴忥紒'); } display('姝e湪杞?崲 '. $table .' 鏁版嵁琛?紝璇峰嬁鍏抽棴鏈?〉闈㈡垨鍒锋柊銆?); global $ecshop_charset, $mysql_charset, $mysql_version; global $db, $prefix; global $convert_tables, $convert_tables_file, $tables_keys, $rpp; $s_charset = str_replace('-', '', $mysql_charset); $d_charset = str_replace('-', '', $ecshop_charset); if ($convert_tables[$table] == 1) { $query = $db->query("SHOW CREATE TABLE `{$table}_bak`", 'SILENT'); if ($query) { $tablestruct = $db->fetch_array($query, MYSQL_NUM); $createtable = $tablestruct[1]; $createtable = preg_replace("/CREATE TABLE `{$table}_bak`/i", "CREATE TABLE `".$table."`", $createtable); if ($mysql_version >= '4.1') { $createtable = preg_replace("/CHARSET\=".$s_charset."/i", 'CHARSET='.$d_charset, $createtable); } if ($db->query($createtable, 'SILENT')) { $convert_tables[$table] = 2; write_tables($convert_tables, $convert_tables_file, 'convert_tables'); } else { showmessage('鍒涘缓琛 ' . $table . ' 鏃跺け璐ワ紒
' . $createtable . '
' . mysql_error($db->link_id)); } } } if ($convert_tables[$table] == 2) { if ($mysql_version >= '4.1') { $db->query('SET NAMES '.$s_charset); } $count = isset($_POST['count'])? intval($_POST['count']) : $db->getOne("SELECT COUNT(*) FROM `{$table}_bak`"); $start = isset($_POST['start'])? intval($_POST['start']) : 0; $query = $db->query("SELECT * FROM `{$table}_bak` LIMIT $start, $rpp"); while($row = $db->fetch_array($query)) { $_key = $_value = array(); $insert_query = "INSERT INTO `{$table}`(`"; foreach($row as $k => $v) { $_key[] = $k; $_value[] = addslashes(ecs_iconv($mysql_charset, $ecshop_charset, $v)); } $_key = implode("`,`", $_key); $_value = implode("','", $_value); $insert_query .= $_key."`) VALUES ('".$_value."');"; if ($mysql_version >= '4.1') { $db->query('SET NAMES '.$d_charset); $db->query("SET sql_mode=''"); } if (!$db->query($insert_query, 'SILENT')) { showmessage('鎻掑叆 ' . $table . ' 琛ㄦ暟鎹?け璐ワ紒
' . $insert_query . '
' . mysql_error($db->link_id)); } } if ($start + $rpp > $count) { unset($convert_tables[$table]); write_tables($convert_tables, $convert_tables_file, 'convert_tables'); if (count($convert_tables) < 1) { @unlink(ROOT_PATH.$convert_tables_file); @setcookie('ECCC', $ecshop_charset, 0); showmessage('
杞?崲缁撴潫锛?/span>
>> 濡傛灉鎮ㄩ渶瑕佹墽琛屽崌绾х▼搴忥紝璇风偣杩欓噷杩涜?鍗囩骇'); } else { array_shift($tables_keys); $extra = ' '; showmessage("鏁版嵁琛 {$table} 杞?崲瀹屾垚锛屾?鍦ㄨ繘鍏ヤ笅涓€涓?暟鎹?〃", '?step=start', 'form', $extra ); } } else { $next_start = $start + $rpp; $extra = ' '; showmessage("姝e湪杞?崲鏁版嵁琛 $table 鐨勭? $start - ".((($start+$rpp) > $count) ? $count : ($start+$rpp))." 鏉℃暟鎹?, '?step=start', 'form', $extra ); } } }