[Discuz!] 基本架構與環境建置指南 – Discuz!X系列

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+後將systemgroups作為系統保留字,而舊版 Discuz 可能遇到 SQL 語句的欄位 Key 沒有使用反引號而造成錯誤,直接改 repo 方式如下:

  1. ./source/class/table/table_common_usergroup.php
    將程式碼中所有用到 system 欄位的 SQL 都改為加上反引號為 system

  2. ./source/class/table/table_forum_announcement.php
    將程式碼中所有用到 groups 欄位的 SQL 都改為加上反引號為 groups


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)

修改完後需要更新緩存更新

One thought on “[Discuz!] 基本架構與環境建置指南 – Discuz!X系列

Leave a Reply

Your email address will not be published. Required fields are marked *