<?php /* +-------------------------------------------------------------------------- | Anwsion 用户导入 Ucenter 工具 | ======================================== | 配置本程序后放在根目录运行一次即可 | ======================================== | 警告: 使用本程序之前请先备份 UCenter 数据库 | ======================================== | 本程序不对因使用此程序造成的一切损失负责 +--------------------------------------------------------------------------- */ require_once ('system/init.php'); require_once (AWS_PATH . 'config/database.php'); require_once (AWS_PATH . 'core/image.php'); /* +-------------------------------------------------------------------------- | 警告: 使用本程序之前请先备份 UCenter 数据库 | ======================================== | 本程序不对因使用此程序造成的一切损失负责 +--------------------------------------------------------------------------- */ /****** 程序配置 ******/ // UCenter 数据库 $config['ucenter'] = array( 'host' => 'localhost', 'username' => 'root', 'password' => 'root', 'dbname' => 'ultrax' ); // 相同 Email 用户合并模式: 0 跳过, 1 用本程序用户覆盖用户信息 (并删除 UCenter 中合并后存在的第二个相同用户名用户) define('USER_MERGE_MODE', 0); // 本程序数据表前缀 define('DB_PREFIX_MASTER', 'aws_'); // UCenter 数据表前缀 define('DB_PREFIX_UCENTER', 'pre_'); // 每次导入的用户数量 (服务器负荷较小可以将值设低) define('USER_IMPORT_PRE', 5); // UCenter 程序路径 define('UCENTER_PATH', ''); /****** 配置结束 ******/ @set_time_limit(0); HTTP::no_cache_header(); $master_db = Zend_Db::factory($config['driver'], $config['master']); $ucenter_db = Zend_Db::factory($config['driver'], $config['ucenter']); $master_db->query("SET NAMES utf8"); $ucenter_db->query("SET NAMES utf8"); if (intval($_GET['page']) == 0) { $next_page = 2; } else { $next_page = intval($_GET['page']) + 1; } $users_list = $master_db->fetchAll("SELECT * FROM " . DB_PREFIX_MASTER . "users LIMIT " . calc_page_limit($_GET['page'], USER_IMPORT_PRE)); foreach ($users_list AS $key => $data) { $uc_user = $ucenter_db->fetchRow("SELECT * FROM " . DB_PREFIX_UCENTER . "members WHERE email = '" . addslashes($data['email']) . "'"); if ($uc_user['uid']) { if (USER_MERGE_MODE == 1) { $ucenter_db->query("UPDATE " . DB_PREFIX_UCENTER . "members SET username = '" . addslashes($data['user_name']) . "', password = '" . $data['password'] . "', email = '" . $data['email'] . "', regip = '" . long2ip($data['reg_ip']) . "', regdate = '" . $data['reg_time'] . "', salt = '" . $data['salt'] . "' WHERE uid = " . intval($uc_user['uid']) . " LIMIT 1"); $other_user = $ucenter_db->fetchRow("SELECT * FROM " . DB_PREFIX_UCENTER . "members WHERE username = '" . addslashes($data['user_name']) . "' AND uid <> " . intval($uc_user['uid'])); if ($other_user['uid'] > 1) { $ucenter_db->query("DELETE FROM " . DB_PREFIX_UCENTER . "members WHERE uid = " . intval($other_user['uid'])); $ucenter_db->query("DELETE FROM " . DB_PREFIX_UCENTER . "memberfields WHERE uid = " . intval($other_user['uid'])); } $master_db->query("DELETE FROM " . DB_PREFIX_MASTER . "users_ucenter WHERE uc_uid = " . intval($uc_user['uid'])); $master_db->query("INSERT INTO " . DB_PREFIX_MASTER . "users_ucenter SET uid = " . $data['uid'] . ", uc_uid = " . $uc_user['uid'] . ", username = '" . addslashes($data['user_name']) . "', email = '" . $data['email'] . "'"); import_avatar($data['uid'], $uc_user['uid']); } } else { $ucenter_db->query("INSERT INTO " . DB_PREFIX_UCENTER . "members SET username = '" . addslashes($data['user_name']) . "', password = '" . $data['password'] . "', email = '" . $data['email'] . "', regip = '" . long2ip($data['reg_ip']) . "', regdate = '" . $data['reg_time'] . "', salt = '" . $data['salt'] . "'"); $uid = $ucenter_db->lastInsertId(); $ucenter_db->query("INSERT INTO " . DB_PREFIX_UCENTER . "memberfields SET uid = " . $uid); $master_db->query("DELETE FROM " . DB_PREFIX_MASTER . "users_ucenter WHERE uc_uid = " . intval($uid)); $master_db->query("INSERT INTO " . DB_PREFIX_MASTER . "users_ucenter SET uid = " . $data['uid'] . ", uc_uid = " . $uid .", username = '" . addslashes($data['user_name']) . "', email = '" . $data['email'] . "'"); import_avatar($data['uid'], $uid); } } function get_avatar($uid, $size = '', $dirname = false) { if (!$size AND !$dirname) { return false; } $uid = abs(intval($uid)); $uid = sprintf("%09d", $uid); $dir1 = substr($uid, 0, 3); $dir2 = substr($uid, 3, 2); $dir3 = substr($uid, 5, 2); $dir = $dir1 . '/' . $dir2 . '/' . $dir3 . '/'; if ($dirname) { return $dir; } return $dir . substr($uid, -2) . '_avatar_' . $size . '.jpg'; } function import_avatar($uid, $uc_uid) { $avatar = ROOT_PATH . 'uploads/avatar/' . get_avatar($uid, 'real'); $avatar_size = array( 'big' => array( 'w' => 200, 'h' => 250 ), 'middle' => array( 'w' => 120, 'h' => 120 ), 'small' => array( 'w' => 48, 'h' => 48 ) ); if (file_exists($avatar)) { $dir = rtrim(UCENTER_PATH, '/') . '/data/avatar/'; make_dir($dir . get_avatar($uc_uid, '', true)); foreach ($avatar_size AS $key => $val) { $image = new core_image(); $image->initialize(array( 'quality' => 90, 'source_image' => $avatar, 'new_image' => $dir . get_avatar($uc_uid, $key), 'width' => $val['w'], 'height' => $val['h'] ))->resize(); } } } if (sizeof($users_list) == USER_IMPORT_PRE) { TPL::assign('message', '正在导入用户, 当前第 ' . $next_page . ' 批 (每批 ' . USER_IMPORT_PRE . ' 个)'); TPL::assign('url_bit', '?page=' . $next_page); } else { TPL::assign('message', '全部用户导入完成, 请删除本工具, 并登录 UCenter 更新数据缓存.'); } TPL::output('global/show_message');错误日志如下
[Fri Jun 05 14:14:50.782157 2015] [:error] [pid 1880:tid 1800] [client 127.0.0.1:62097] PHP Fatal error: Uncaught exception 'Zend_Db_Statement_Mysqli_Exception' with message 'Mysqli prepare error: Table 'ultrax.pre_members' doesn't exist' in D:\\phpStudy\\WWW\\UPLOAD\\system\\Zend\\Db\\Statement\\Mysqli.php:77\nStack trace:\n#0 D:\\phpStudy\\WWW\\UPLOAD\\system\\Zend\\Db\\Statement.php(115): Zend_Db_Statement_Mysqli->_prepare('SELECT * FROM p...')\n#1 D:\\phpStudy\\WWW\\UPLOAD\\system\\Zend\\Db\\Adapter\\Mysqli.php(388): Zend_Db_Statement->__construct(Object(Zend_Db_Adapter_Mysqli), 'SELECT * FROM p...')\n#2 D:\\phpStudy\\WWW\\UPLOAD\\system\\Zend\\Db\\Adapter\\Abstract.php(479): Zend_Db_Adapter_Mysqli->prepare('SELECT * FROM p...')\n#3 D:\\phpStudy\\WWW\\UPLOAD\\system\\Zend\\Db\\Adapter\\Abstract.php(756): Zend_Db_Adapter_Abstract->query('SELECT * FROM p...', Array)\n#4 D:\\phpStudy\\WWW\\UPLOAD\\uc_import.php(76): Zend_Db_Adapter_Abstract->fetchRow('SELECT * FROM p...')\n#5 {main}\n thrown in D:\\phpStudy\\WWW\\UPLOAD\\system\\Zend\\Db\\Statement\\Mysqli.php on line 77请假各位如何解决 又出现新的报错了
[Fri Jun 05 15:28:18.515264 2015] [:error] [pid 8408:tid 1836] [client 127.0.0.1:50104] PHP Fatal error: Uncaught exception 'Zend_Db_Statement_Mysqli_Exception' with message 'Mysqli statement execute error : Duplicate entry 'demo1' for key 'username'' in D:\\phpStudy\\WWW\\UPLOAD\\system\\Zend\\Db\\Statement\\Mysqli.php:214\nStack trace:\n#0 D:\\phpStudy\\WWW\\UPLOAD\\system\\Zend\\Db\\Statement.php(303): Zend_Db_Statement_Mysqli->_execute(Array)\n#1 D:\\phpStudy\\WWW\\UPLOAD\\system\\Zend\\Db\\Adapter\\Abstract.php(480): Zend_Db_Statement->execute(Array)\n#2 D:\\phpStudy\\WWW\\UPLOAD\\uc_import.php(100): Zend_Db_Adapter_Abstract->query('INSERT INTO pre...')\n#3 {main}\n thrown in D:\\phpStudy\\WWW\\UPLOAD\\system\\Zend\\Db\\Statement\\Mysqli.php on line 214 [Fri Jun 05 17:14:51.125901 2015] [mpm_winnt:crit] [pid 8408:tid 392] AH02538: Child: Parent process exited abruptly. Child process is ending
AI智能回复搜索中,请稍后...