前言: 在目前的 Linux 版本中 ( 2003年以後的 Linux 版本 ) ,在您安裝完 Linux 之後,通常已經都將 WWW 伺服器軟體架設上去了!那就是 Apache 這個套件啊!有了這個套件之後,您的 Linux 主機就已經具備成為 WWW 伺服器的功能了!不過,這樣還不夠的!因為目前我們都希望 WWW 伺服器可以達到與瀏覽者互動的一個功能,而這個功能在使用傳統的 HTML 語法是無法達成的吶!而要達到這樣的功能,除了可以藉由 CGI 這個主機端程式所提供的介面外 ( Server side include, SSI ),也可以透過 PHP 與 MySQL 這兩個套件的功能來達成的。那麼什麼是 CGI, SSI, PHP 與 MySQL 呢?底下約略來談一談喔! 什麼是 CGI ? 所謂的 CGI 就是 Common Gateway Interface 的簡寫,事實上, CGI 是主機上面的一些程式或者是 scripts ,通常最常見到的就是以 perl 這個類似程式語言 ( program ) 的程式碼所寫成的一支程式,另外, bash shell 也可以用來撰寫 CGI 程式喔!因為 CGI 其實是一支程式,當使用者以瀏覽器連接上這支程式的時候,由於 Apache 提供了這支程式可以執行的能力,因此,使用者就可以透過這支程式來達到資訊交流的目的了!例如很多網站的留言版就是使用 perl 來寫成的吶!(註:perl 其實有點類似 BASH ,不過功能更為強大!) 不過,也由於這支程式可以在主機上被執行,因此,如果 CGI 程式設計的不好,有可能被拿來做為入侵的跳板喔!這點可要千萬注意,不要在網路上面亂拿 CGI 程式來直接安裝到自己的 Linux 主機上吶! 什麼是 SSI? 這個名詞頗為有趣, Server Side Include, SSI ,怎麼稱之為『主機端包含者』?是這樣的,所謂的 Server side include ,說穿了,就是所有的『程式執行過程都在主機端, Client 端只負責接收最後的資訊而已』,這是什麼意思?舉個例子來說,當我們以瀏覽器,例如 Netscape 來連接到某網站的留言版時,該留言版是以 CGI 程式寫成的,當這個網站接收你的要求之後,首先就會在該主機端進行這個留言版程式的執行,執行完畢之後,再將結果透過 80 port 傳送到你的瀏覽器上面,你就可以看到最終的留言版版面囉!這樣的整個程序看來,在您的 Client 端上面,完全不需要知道主機端做了什麼動作,就可以接收到你所需要的訊息!這就是所謂的 SSI 囉! 這樣有什麼優點呢?最大的優點就是方便程式開發與使用者瀏覽的便利性了。怎麼說呢?在早期的 WWW Server 與 client 的資料傳送當中,當你的 WWW Server 開發出新的程式時,使用者若要使用這個程式的功能,則他們的瀏覽器也要支援該程式的相關功能才行!這樣很麻煩呢,想像一下,全世界這麼多部的主機,當你要連上某部主機,就要安裝某部主機的相關程式功能,我們每天連上這麼多的網站,每個網站都要求安裝新的程式,......想不瘋掉都很難~ 這時,SSI 的功能就很突顯出必要性了!因為使用者完全不需要安裝新的程式!反正程式都是在主機端執行的,使用者完全不需要知道程式做了什麼動作,這樣一來,呵呵!真的方便很多喔!目前大多的 CGI 程式、PHP 網路語言等等都是使用 SSI 的方式來進行編寫的!所以很方便使用呢! ^_^ 什麼是 PHP 與 MySQL ? 事實上, PHP 可以當成是一種網頁程式語言,基本上他就是一堆程式碼,當使用者連接到這個程式碼檔案後,這個程式就開始在主機端執行,最後會產生一些 HTML 的內容資訊,而將這些 HTML 的資訊傳輸到使用者端的瀏覽器上。因此,使用者是看不到程式碼的,只會看到最終的輸出結果。由於 PHP 的程式執行效能高,而且相對於 CGI 又比較安全,因此,目前使用上很廣泛喔! 至於 MySQL 則是一個資料庫軟體,什麼是資料庫呢?就是當使用者傳送一些資訊後,這些資訊可以被儲存到一個特定格式的特定檔案,這個檔案就可以稱之為資料庫了!而 MySQL 就是管理這些資料庫的軟體囉。目前資料庫軟體很多,MySQL 就是其中一個。 MySQL 提供一個介面,很多程式( 例如 PHP ) 可以透過 MySQL 提供的介面來進行資料庫的存取,而由於 PHP 是程式,因此資料庫就可以被 PHP 程式動態的存取與刪除,所以,就可以做成一個『動態』的網站啦! 這個 Linux 提供作業系統平台,Apache 提供 WWW 的網路服務,PHP 提供程式的開發,MySQL 提供資料庫的動態存取,就結合成為 LAMP 的動態網站囉!還有更多的相關訊息,可以參考 VBird 之前寫的 WWW 伺服器架設 喔! | 這就是一些相關的資訊囉!而為了製作一個美觀的動態 WWW 網站,很多程式開發者利用 PHP 的優良功能,結合 MySQL 提供的資料庫介面,進行所謂『架站機』開發,例如很有名氣的 PHPNuke, phpBB 等等,在這裡,我們要介紹的就是 phpBB 這個也是很優良的架站機套件啦! 目前 phpBB 這個超級架站機已經出到 2.0.5 版本了 ( 2003/06/17 ) ,還記得幾年前 ( 大約在 2001 年底 ) VBird 才剛剛翻譯完成 phpBB 1.4.4 版的 FAQ ,呵呵,沒想到一下子 phpBB 就已經出到 2.0.5 版本了!真是快啊!與 1.4.xx 版本不同, 2.0.xx 版本的介面更為漂亮且柔和,鳥哥真是很喜歡!此外, 2.0.xx 版已經重新釋出好幾次了,而這次的 2.0.5 是最終版本,下一代的 phpBB 會是由 2.2.xx 版本開始計數的!( 註: 2.0.0 是在 2002/04/03 釋出的,到 2003/06/17 釋出最終版本的 2.0.5 ,程式更穩定,也克服了一些臭蟲) 在最新的這個 phpBB 2.0.5 版中,除了已經克服了一些程式的臭蟲之外,在這個 2.0.xx 版本上面,最大的特色就是:『在測試版的時候,台灣的竹貓星球就已經製作好完全的中文化功能』了!呵呵!真是很了不起喔!我們真的要感謝竹貓星球的幾位同好進行的這個中文化工程,讓我們使用者在使用的時候,就相當的順手囉!另外,在中文化之餘,這個 2.0.xx 版本也提供了『外掛模組』的功能!所謂的『模組』就是一些加強的功能,例如『列印、版面風格、反白光條...』等等的其他使用方式喔!相當的不錯吧! 事實上,這個 phpBB 主程式與模組鳥哥通通沒有參與開發,就只會用~真是不好意思~所以呢,希望大家可以在架完站之後,可以前往 phpBB 官方網站以及國內的竹貓星球網站上面給予這些朋友支持與鼓勵喔!有他們的存在,我們才有這麼好用的軟體可以使用啊! ^_^。 phpBB 官網與竹貓的網站在底下: 尤其是竹貓星球,有空真的要多多上去學習一下模組的使用喔!同時,竹貓星球站長群也寫了一本『phpBB論壇架設寶典』裡面更是提到更多的模組相關技能與 phpBB 的一些密技喔!底下也列出一些目前與 Linux 相關性比較高的幾個 phpBB 的風格網站喔! phpBB 架設之前的必要套件: 在前面我們提到了一些相關的 WWW 伺服器觀念,以及 PHP 與 MySQL 還有 SSI 等等的概念,相信您應該會比較瞭解 WWW 的相關技巧了。好了,既然 phpBB 這個超級架站機是安裝在 WWW 伺服器主機上面的,而且他是 PHP 寫成的,並且有用到 MySQL 的資料庫,所以囉,你就必須要有安裝底下的幾個套件: - Apache :基本上,各大 Linux distributions 都會主動提供 Apache ,所以,拿出光碟,直接安裝他吧!
- MySQL:至少需要 3.23 以上的版本,如果您是以 Red Hat 7.0 以上的版本安裝的話,那麼應該是沒問題才對!
- PHP:最好使用 4.xx.xx 版本以上的!
事實上,要安裝好上面三個套件並不容易,必須要有 RPM 與 Tarball 的概念,尤其如果您需要的是手動的方式自己編譯這三個套件的話,那就更麻煩了!無論如何,參考一下 VBird 之前寫的 WWW 伺服器架設 是有幫助的! 當然,除了 LAMP ( Linux + Apache + MySQL + PHP ) 之外,既然要安裝 phpBB ,當然就要有 phpBB 的主程式包囉!還有,需要中文化套件吶!所以,如果是完整安裝的話,您至少需要三個檔案喔!請到 phpBB 官方網站下載: 如果上面的網站沒有辦法完成您的下載的話,也可到鳥哥的私房菜來下載喔!下載網址為: 再次說明,總共要三個檔案啊! 安裝 ( 或升級 ) phpBB 2.0.5: 在這裡我假設您已經完成了 LAMP 的架設了,所以呢,直接就來進行 phpBB 的安裝與升級吧!不過需要事先聲明的是,由於這一版在『全新安裝』方面非常的簡單,但是在『系統升級』選項則有點麻煩,因此,在實際操作前,請『千萬記得備份資料庫』,否則一個不小心,呵呵,那就不要怪鳥哥沒有提醒你囉!另外,如果是升級安裝的時候,請千萬注意:『將原本的 phpBB 服務先關掉,例如將該目錄先移動到其他地方去,避免有其他人連進資料庫』!好了,就談一談全新安裝與升級的流程吧!
全新安裝 phpBB 架站機: 全新安裝其實很簡單的啦!一步一步來操作吧: - 建立資料庫:
由於我們要使用 MySQL 的資料庫,所以,當然就需要取得資料庫的使用權限啦!如果您不是在自己的 Linux 主機上面架設 phpBB 的話,請向您的網路管理員申請一個資料庫的帳號與資料庫的名稱喔!如果您是 Linux 系統管理員,那就好辦多了!假設我需要一個帳號為 phpbbuser 以及一個資料庫名稱為 phpbb2 的話,可以這麼做: # 1. 利用 MySQL 的 root 身份建立資料庫與帳號: [root@test root]# mysql -u root -p Enter password: <==輸入你的 MySQL 的 root 密碼 Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 3 to server version: 3.23.56 Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql> create database phpbb2; <==注意每個指令後面要加上 ; Query OK, 1 row affected (0.00 sec) mysql> grant all privileges on phpbb2.* to phpbbuser@localhost identified by 'your.password' ; <==將剛剛建立的 phpbb2 權限給 phpbbuser 這個帳號! Query OK, 0 rows affected (0.01 sec) mysql> exit Bye # 2. 測試剛剛建立的資料庫與帳號是否可以使用: [root@test root]# mysql -u phpbbuser -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 4 to server version: 3.23.56 Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql> connect phpbb2; Connection id: 5 Current database: phpbb2 mysql> exit Bye | 這樣就完成囉!很簡單吧!不過,要記得的是: - 你的 MySQL 主機名稱為 localhost ,這個是 MySQL 的主機名稱,不是 Linux 主機名稱!通常 MySQL 的主機名稱『一定』是 localhost 喔!
- 你的 MySQL 資料庫名稱為 phpbb2 喔!
- 你的 MySQL 帳號為 phpbbuser 且密碼為 your.password 喔!
- 套件包解壓縮:
剛剛下載的三個檔案必須要好好的進行解壓縮喔!解壓縮的相對位置不能搞錯!不然就無法顯示完整的中文了!假設我是在 root 的家目錄底下解壓縮的,所以:(註:假設三個檔案都放置在 /root 底下) [root@test root]# tar -zxvf phpBB-2.0.5.tar.gz 會建立一個目錄在 /root 底下,成為 /root/phpBB2 [root@test root]# cd phpBB2/language/ [root@test language]# tar -zxvf /root/lang_chinese_traditional_taiwan.tar.gz 這個動作在於建立中文化檔名在語言目錄中! [root@test language]# cd /root/phpBB2/templates [root@test templates]# tar -zxvf /root/subSilver_chinese_traditional_taiwan.tar.gz [root@test templates]# cd /root/phpBB2 [root@test phpBB2]# chmod 666 config.php | 好了!目前你的完整的 phpBB2 的套件就在 /root/phpBB2 這個目錄底下囉! - 網站目錄移動:
在這裡你可以使用虛擬主機 (Virtual Host) 的功能來設定您的 WWW 主機,不過,我這裡用比較簡單的方式來進行 phpBB 的架設!假設您的 phpBB 預設要安裝在 http://your.host.name/phpbb2 的話,而且,你的網站主頁又在 /var/www/html 底下(這些都是預設值喔!),那麼你可以直接這樣做: [root@test phpBB2]# cd /root [root@test root]# mv phpBB2 /var/www/html/phpbb2 | 好了!未來你只要輸入 http://你的主機名稱/phpbb2 就可以進入到 phpBB2 這個超級架站機囉! - 開始網路安裝:
phpBB2 的安裝真的是很簡單的啦!只要在你的瀏覽器上面輸入你的 phpBB2 的主目錄即可!剛剛我們不是安裝在 http://主機名稱/phpbb2 嗎?!所以,當我在瀏覽器的網址列輸入這個咚咚時,他會出現如下畫面:(註:如果出現亂碼時,請到您的瀏覽器上面,設定好『編碼』成為 big5 即可!)
上頭主要分為兩部份來填寫,首先,主機資訊部分,請參考剛剛我們所建立的 MySQL 資料庫的資訊,就給他填寫進去吧!另外,由於 phpBB2 裡面需要一個系統管理員,所以,您必須要建立系統管理員的相關權限喔!填寫好了之後,就給他按下『開始安裝吧!』(註:如果出現:『您主機上的 PHP 不支援您所選擇的資料庫型態』,通常是忘記安裝 php-mysql 這個套件了!拿出光碟來安裝他即可囉!)最終的結果會如下所示:
按下『完成安裝』之後,會出現如下畫面:
- 後續安全設定項目:
因為害怕被入侵我們的 phpBB ,所以,目前 phpBB 要能運作的話,必須要移除一些安裝過程會使用到的檔案,由於這些檔案是不需要存在的(只有在安裝的時候才會用到),所以,必須要移除之後,phpBB2 才能正常的來運作喔! [root@test root]# cd /var/www/html/phpbb2 [root@test phpbb2]# chmod 644 config.php [root@test phpbb2]# rm -rf install [root@test phpbb2]# rm -rf contrib | - 完成設定:
這樣一來,應該可以進入您的 phpBB 囉!在出現的第一次 phpBB 畫面中,請以系統管理員的身份登入:
可以的話,並同時勾選『自動登入』,如此一來,每次您進入 phpBB 時,都會使用這一個身份來登入,並且,如果是以管理員的身份來登入的話,哈哈!最底部會出現一個隱藏的項目:
這樣就能夠讓您進入 phpBB 系統去進行其他額外的設定囉!更多更詳細的功能可以到竹貓星球去詢問,也可以買一本 phpBB 論壇架設寶典來參考喔!
升級到 phpBB2.0.5 版本: 如果原先就有 phpBB 的版本在您的系統上面的話,那麼升級到 phpBB2.0.5 也是必須要的啦!因為最起碼就比較安全啊!那麼要如何升級呢?!事實上,升級是有一定的『危險性』,所以需要進行的項目還不少呢!一步一步來吧! 升級過程中,最重要的莫過於『備份』了!所以,請將目前您的 phpBB 版本與 MySQL 資料庫做一個備份才好喔!舉個例子來說,如果您的 phpBB2 的程式原本放置在 /var/www/html/phpbb2 的話,那麼就將他先移動到 /root 底下吧!然後如果您是以 RPM 安裝 MySQL 的話,一般來說,資料庫會放置在 /var/lib/mysql 底下,所以,在備份的地方,您可以這樣做: [root@test root]# mv /var/www/html/phpbb2 /root [root@test root]# cd /var/lib [root@test lib]# tar -zcvf mysql.20030702.tar.gz mysql | 在這樣的情況下,您的 phpbb2 前一版的程式碼不會丟掉,而且資料庫也順利的備份了下來,未來如果在升級的時候出了點差錯,還可以將原來的資料庫還原,且程式碼還是可以救回來的,安全多了呢! - 資料庫檔案取代與升級步驟:
在備份妥當之後,其他的升級步驟相對簡單很多!參考上面 完全安裝 的步驟 2 與步驟 3 的說明,先建立 phpbb2 這個目錄 ( /var/www/html/phpbb2 ) ,然後將原來的 config.php 檔案覆蓋掉這個目錄底下的 config.php ,之後以瀏覽器瀏覽底下這個檔案: http://你的主機名稱/phpbb2/install/update_to_205.php 就會得到底下的畫面模樣!
- 後續處理:
後續的處理就一樣啦!簡單的很: [root@test root]# cd /var/www/html/phpbb2 [root@test phpbb2]# chmod 644 config.php [root@test phpbb2]# rm -rf install [root@test phpbb2]# rm -rf contrib | 然後就又可以使用你的 phpBB2 囉!升級真的是很簡單的啦! ^_^
關於模組: 事實上, phpBB2 最吸引人的地方,在於他可以自行開發新的模組來進行外掛,這使得每個人的 phpBB2 的風格都不相同!並且您可以視自己的喜好來決定您自己的外掛模組!相當的棒喔!如果想對模組有進一步的認識,建議您可以到竹貓星球去瞧一瞧,就瞭解什麼是 phpBB2 的模組外掛囉! 不過,每次升級之後,這些外掛的模組都得要再重新的編寫一次,真的是很麻煩~好在這一次這個 2.0.5 據說是最終版本了!所以不會再進行額外的升級囉!所以,來個徹底大檢修,個人覺得這也是不錯的啦! ^_^ 其他安全的注意事項(很重要!不要忽略): - 竹貓星球的樣式宣告:
由於改版的過程中出了點小差錯,所以竹貓星球的樣式宣告竟然就此不見去!真是~這裡我們將他改回來吧! ^_^! [root@test root]# cd /var/www/html/phpbb2 [root@test root]# vi language/lang_chinese_traditional_taiwan/lang_main.php 找到底下這一行: $lang['TRANSLATION'] = '繁體中文強化版由 <a href="http://phpbb-tw.net/"><font color="#FF6633">竹貓星球PBB2中文強化開發小組</font></a> 製作'; 將他改成: $lang['TRANSLATION_INFO'] = '繁體中文強化版由 <a href="http://phpbb-tw.net/" target="_blank"><font color="#FF6633">竹貓星球PBB2中文強化開發小組</font></a> 製作'; | 這樣就 OK 了! - 較早版本升級的錯誤結果:
這個問題僅存在於較早之前的版本,也就是以 phpBB 1.4.4 升級到 phpBB 2.0.0 的時候,由於一些小問題,所以升級完畢後竟然會發現『使用者無法註冊,並且舊的使用者也沒有辦法更新自己的設定』在 phpBB 的官方網站上發表了聲明,說這是因為一些欄位發生錯誤所致!要如何是好?使用 mysql 來增加欄位吧! [root @test /root]# mysql -u phpbbuser -p Enter password: <==這裡請輸入你的 MySQL 密碼! Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 11 to server version: 3.23.41 Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql> connect phpbb2 ; Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Connection id: 26899 Current database: phpbb2 mysql> ALTER TABLE phpbb_users ADD COLUMN user_timezone float DEFAULT '0' NOT NULL ; Query OK, 1 row affected (0.04 sec) mysql> exit | 在上面中,注意一下特殊的字體,那個 phpbb2 指的是你安裝 phpBB 2.0 的資料庫名稱;而 phpbb_users 那個 phpbb_ 則是剛剛使用瀏覽器安裝的時候,那個表格字首的項目!!假如你是使用 phpBB 作為你的表格字首,那麼這裡就要改成 phpBBusers 囉!這樣改完你的使用者 profile 與 註冊功能 就恢復正常啦! - 建議的升級版本問題:
由台灣網路危機處理中心公佈的訊息中, PHP 這個網路語言程式有些漏洞,而這些語法上的漏洞會造成主機被 Cracker 利用 DoS 的方式來攻擊,並可能造成主機的資源無力化而當機~~網友 Chad 也寄一份資料給我看過,說明 phpBB 1.4.xx 所有的版本由於都使用到此一語法,所以都有可能會造成主機的困擾!!雖然 phpBB 2.0 還沒有經過危機小組的測試,不過畢竟會稍微安全一些些吧!由於這種種的問題,所以才會建議您可能的話,還是升級到比較高的版本吧!就是這個 2.0.5 囉! - 關於系統管理員的身份問題:(重要)
這是來自於竹貓星球的大統領小竹子與南宮博士的建議!phpBB2 的系統管理員具有最大的權限,而該權限似乎可能會與其他的板主權限相衝突而造成不可預期的錯誤!所以最好不要讓系統管理員當板主呦!重要重要! - 權限的問題:
將 config.php 權限改回來!就是以 chmod 644 config.php 這個指令將 config.php 的權限改回來吧! - phpBB 官方網站的安全性公告:
由於 phpBB 使用到 Linux 主機上面的資訊很多,所以,您必須要瞭解到這個程式確實有可能會產生一些安全上的漏洞的!建議您隨時注意 phpBB 的公告網站:http://www.phpbb.com/phpBB/,裡面不定期會有很多的技術公告,可以預防您的 phpBB 被破壞喔!底下就列出幾個近期發生的問題克服吧!
漏洞修補: - 這是在 2003/06/25 公佈的一項漏洞,雖然不會直接對您的 phpBB2 造成危害,但是卻可以讓其他有心人士使用你的系統上面的其他檔案!公佈在:http://www.phpbb.com/phpBB/viewtopic.php?t=113826,請進行修改吧!
開啟 admin/admin_styles.php 這個檔案,尋找底下這段文字: // // Load default header // // // Check if the user has cancled a confirmation message. // $phpbb_root_path = "./../"; $confirm = ( isset($HTTP_POST_VARS['confirm']) ) ? TRUE : FALSE; $cancel = ( isset($HTTP_POST_VARS['cancel']) ) ? TRUE : FALSE; if (empty($HTTP_POST_VARS['send_file'])) { $no_page_header = ( $cancel ) ? TRUE : FALSE; require($phpbb_root_path . 'extension.inc'); require('./pagestart.' . $phpEx); } if ($cancel) { redirect('admin/' . append_sid("admin_styles.$phpEx", true)); } 將上面這段文字完整的修改成為底下的模樣: // // Load default header // // // Check if the user has cancled a confirmation message. // $phpbb_root_path = "./../"; require($phpbb_root_path . 'extension.inc'); $confirm = ( isset($HTTP_POST_VARS['confirm']) ) ? TRUE : FALSE; $cancel = ( isset($HTTP_POST_VARS['cancel']) ) ? TRUE : FALSE; $no_page_header = (!empty($HTTP_POST_VARS['send_file']) || $cancel) ? TRUE : FALSE; require('./pagestart.' . $phpEx); if ($cancel) { redirect('admin/' . append_sid("admin_styles.$phpEx", true)); } | - 這是在 2003/06/20 公佈的一項漏洞,公佈在:http://www.phpbb.com/phpBB/viewtopic.php?t=112052,可能會對您的系統造成一些錯誤訊息!請進行修補:
找出您的 viewtopic.php ,並找到底下的字眼: if ( isset($HTTP_GET_VARS[POST_TOPIC_URL]) ) { $topic_id = intval($HTTP_GET_VARS[POST_TOPIC_URL]); } else if ( isset($HTTP_GET_VARS['topic']) ) { $topic_id = intval($HTTP_GET_VARS['topic']); } 在上面這一段文字之前,新增: $topic_id = $post_id = false; 在同樣這個檔案,往下找到如下的字眼: $join_sql_table = ( !isset($post_id) ) ? '' : ", " . POSTS_TABLE . " p, " . POSTS_TABLE . " p2 "; $join_sql = ( !isset($post_id) ) ? "t.topic_id = $topic_id" : "p.post_id = $post_id AND t.topic_id = p.topic_id AND p2.topic_id = p.topic_id AND p2.post_id <= $post_id"; $count_sql = ( !isset($post_id) ) ? '' : ", COUNT(p2.post_id) AS prev_posts"; $order_sql = ( !isset($post_id) ) ? '' : "GROUP BY p.post_id, t.topic_id, t.topic_title, t.topic_status, t.topic_replies, t.topic_time, t.topic_type, t.topic_vote, t.topic_last_post_id, f.forum_name, f.forum_status, f.forum_id, f.auth_view, f.auth_read, f.auth_post, f.auth_reply, f.auth_edit, f.auth_delete, f.auth_sticky, f.auth_announce, f.auth_pollcreate, f.auth_vote, f.auth_attachments ORDER BY p.post_id ASC"; 將他修改為如下模樣: $join_sql_table = ( empty($post_id) ) ? '' : ", " . POSTS_TABLE . " p, " . POSTS_TABLE . " p2 "; $join_sql = ( empty($post_id) ) ? "t.topic_id = $topic_id" : "p.post_id = $post_id AND t.topic_id = p.topic_id AND p2.topic_id = p.topic_id AND p2.post_id <= $post_id"; $count_sql = ( empty($post_id) ) ? '' : ", COUNT(p2.post_id) AS prev_posts"; $order_sql = ( empty($post_id) ) ? '' : "GROUP BY p.post_id, t.topic_id, t.topic_title, t.topic_status, t.topic_replies, t.topic_time, t.topic_type, t.topic_vote, t.topic_last_post_id, f.forum_name, f.forum_status, f.forum_id, f.auth_view, f.auth_read, f.auth_post, f.auth_reply, f.auth_edit, f.auth_delete, f.auth_sticky, f.auth_announce, f.auth_pollcreate, f.auth_vote, f.auth_attachments ORDER BY p.post_id ASC"; |
重點回顧
|