Intro
原官方網站(Deprecated)目前似乎只介紹到X3.2版本,可以參考Discuz! G雲碼專案或官方論壇,同期已經到x3.4。
各版本Github下載: yidas/discuzx-release
PHP 相容
- x3.2含以前支援PHP 5.6,不支援PHP 7.0以上
- x3.3支援PHP 5.6 / 7.2
升級版本
版本間升級請查詢Discuz!官網確認,以下說明基於Discuz!X系列套件:
查看目前版本
Discuz!X系列版本PHP檔案位置:source/discuz_version.php
UCenter版本PHP檔案位置:uc_server/release/release.php
升級版本節點
以下為Discuz升級的版本節點,版本升級範圍只能在每個節點區間內進行,無法一次性跨越升級:
- 7.2 => X2.0
- X2.0 => X3.2
- X3.2 => X3.4
目錄與檔案保留
-
Discuz!X 論壇主程式:覆蓋 repo (程式碼檔案) 後,主程式工具包中
utility/update.php
複製到 repo./install/
下並執行訪問即可進入升級引導程序。 -
UCenter:覆蓋 repo (程式碼檔案) 後,UCenter 程式工具包中
utilities/upgrade_xxx_xxx.php
複製到 repo./uc_server/
下並執行訪問即可進入升級引導程序。
設定檔:
主要設定檔(DB etc.): config/
附件保存
裡面尚有分結構:data/attachment
頭像保存
屬於UC系統:uc_server\data\avatar
風格樣式
如版本相容,Template可以全部或選擇轉移:template/
UCenter
如UC與主程式在一起,可以保留整包Ucenter(Client & Server):uc_client/
, uc_server
UC Server設定檔位於
uc_server/data/config.inc.php
若升級遇到版本判斷錯誤,可以直接訪問
/install/update.php?step=prepare
跳過,或直接修改update.php
程式碼。
FAQ
X3.4錯誤: (1054) Unknown column port in field list
應為升級包Bug,可以自行增加該column:
ALTER TABLE pre_common_member_status
ADD port
smallint(6) NOT NULL DEFAULT '';
檔案目錄權限
就目前X3版本系列,官方建議開啟web server寫入權限的目錄:
./config/
./data
./uc_client/data/cache
./uc_server/data
密碼規則
UCenter
密碼生成規則如下:
md5(md5($password).$salt);
$salt
每個用戶各自不同存於pre_ucenter_members
資料表
欄位
secques
為安全提問,空為移除使用UCenter後論壇主程式的memeber表密碼就沒作用了
其他規則
審核會員
Discuz!等待驗證會員
是預設member group ID為8
,所以在pre_common_member
即能辨識,另外對應到pre_ucenter_members
。
- 會員等待驗證表(後台等待審核的會員數):
pre_common_member_validate
相關 Bug
misc.php Content-Type 錯誤
部份半本以登入驗證碼的顯示來說,misc.php response Header content-type 是text/html
,而當 Header X-Content-Type-Options 的设置是 nosniff
時,browser 理應就會拒绝 script 的執行。
快速硬解是在 /misc.php
先加入 header,建議加在流程前面以免 rewrite 到其他 source php code 也更改 header 的狀況:
header('Content-Type: application/javascript');
MySQL 8.0+ 語句使用系統保留字錯誤
MySQL 8+後將system
與groups
作為系統保留字,而舊版 Discuz 可能遇到 SQL 語句的欄位 Key 沒有使用反引號而造成錯誤,直接改 repo 方式如下:
-
./source/class/table/table_common_usergroup.php
將程式碼中所有用到system
欄位的 SQL 都改為加上反引號為 -
./source/class/table/table_forum_announcement.php
,
將程式碼中所有用到groups
欄位的 SQL 都改為加上反引號為
MeriaDB 相容性問題
Discuz!在判斷相容MySQL版本目前是使用單純的字串比較,如install\include\install_function.php
內:
($dbver > '4.1' ? " ENGINE=$type DEFAULT CHARSET=".DBCHARSET : " TYPE=$type");
而$dbver
一般皆由各version()
函式個別從原生mysql_get_server_info()
函式取得,所以MeriaDB可能會回傳如10.1.38-MariaDB-cll-lve
,而造成比對後是小於4.1
版本。
Install修正
Install部分主要使用install\include\install_mysql.php
作為$db
全域變數,所以修改:
function version() {
return '5.6'; // 直接指定回傳版本
// return mysql_get_server_info($this->link);
}
其他修正
Install完後,論壇的使用上還是會有MySQL語系語法判定錯誤問題,各程式各自有function version()
需修改:
source/class/db/db_driver_mysql.php
source/class/db/db_driver_mysqli.php
uc_client/lib/db.class.php
uc_client/lib/dbi.class.php
uc_server/lib/db.class.php
uc_server/lib/dbi.class.php
api/db/dbbak.php (x2)
修改完後需要更新緩存更新
hi 🙂 bross 🙂