首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 將會員資料匯入 UCenter 實現多系統用戶同步

     編輯:PHP 相關知識

同步原理

UCenter(Discuz! 核心用戶中心)僅需操作兩張核心表即可完成用戶同步:uc_members(基本帳號資訊)與 uc_memberfields(擴充資料)。本文示範將自有會員表資料批次匯入,並依 UCenter 規則生成鹽值與加密密碼。

資料表結構

-- 來源會員表
CREATE TABLE `net_members` (
  `id` INT(11) NOT NULL AUTO_INCREMENT,
  `username` VARCHAR(32) DEFAULT NULL,
  `add_time` INT(11) DEFAULT NULL,
  `email` VARCHAR(50) DEFAULT NULL,
  `password` VARCHAR(50) DEFAULT NULL,
  `last_login` INT(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

匯入腳本完整程式碼

<?php
$host = 'localhost';
$db   = 'abc';
$user = 'root';
$pass = 'root';

$conn = mysql_connect($host, $user, $pass);
mysql_select_db($db, $conn);
mysql_query("SET NAMES utf8");

$sql = "SELECT * FROM net_members";
$query = mysql_query($sql, $conn);

while ($row = mysql_fetch_assoc($query)) {
    // 檢查是否已存在
    $check = mysql_query("SELECT uid FROM uc_members WHERE username='{$row['username']}'");
    if (mysql_num_rows($check) > 0) continue;

    // UCenter 密碼規則:md5(md5($password) . $salt)
    $salt = substr(uniqid(rand()), -6);
    $password = md5(md5($row['password']) . $salt);

    // 寫入 uc_members
    $ins_sql = "INSERT INTO uc_members
        (uid, username, password, email, regdate, lastlogintime, salt)
        VALUES
        ({$row['id']}, '{$row['username']}', '$password', '{$row['email']}', {$row['add_time']}, {$row['last_login']}, '$salt')";
    mysql_query($ins_sql);

    // 寫入 uc_memberfields(空擴充欄位)
    mysql_query("INSERT INTO uc_memberfields (uid) VALUES ({$row['id']})");
}

echo "所有用戶已匯入 UCenter";
?>

關鍵點解析

  1. 密碼加密:UCenter 使用雙層 MD5 + 6 位元隨機鹽值,md5(md5($plain) . $salt)。
  2. UID 保持一致:直接沿用來源表 id 作為 uid,避免關聯資料斷裂。
  3. 時間戳:regdate、lastlogintime 均為 Unix Timestamp。
  4. 編碼統一:資料庫、連線、PHP 檔案均使用 UTF-8。

擴充建議

  • 加入事務處理(BEGIN; ... COMMIT;)確保資料一致性。
  • 支援批次更新:若用戶已存在,同步 Email、密碼等欄位。
  • 整合至 CLI 指令或排程任務,定期同步增量資料。
  • 若使用 Discuz! X 系列,建議改用官方提供的 uc_user_register() API。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved