首先說一下我的網站(
www.rupeng.com)的結構,discuz論壇放在了網站根目錄的forum目錄下,論壇的附件目錄并沒有使用默認的/forum/ attachments,而是我把論壇附件也挪到了網站根目錄的“/forum_attachments”下,因此我在discuz后臺將【附件保存位置】修改為“./../forum_attachments”(discuz文檔中說“相對目錄務必以 "./" 開頭”)。然后同時啟用了“遠程附件”。
經過上面的修改以后我發現當上傳的附件超過“附件尺寸下限”的時候提示“附件文件無法保存到遠程服務器,請與管理員聯系”,也就是上傳遠程附件失敗。經過調試discuz代碼發現了問題所在,確認是discuz的Bug。
Bug在include/post.func.php的ftpupload函數中,如果是上傳的遠程附件,那么假設$source參數傳過來的是“/www/users/cownew.com/forum/./../forum_attachments/month_0906/20090602_8af8as9dfas8du9823898898.rar”,后面的代碼把$source傳遞給了dftp_put函數,但是好像dftp_put函數對這種有點復雜的路徑“/www/users/cownew.com/forum/./../forum_attachments/month_0906/20090602_8af8as9dfas8du9823898898.rar”識別有Bug,因此我在ftpupload函數的一開始加入一句“$source=realpath($source)”來將這個復雜的相對路徑轉換為絕對路徑。這樣問題就解決了。
我采用的是康盛的虛擬主機,昨天晚上康盛的技術人員整個晚上都在幫我解決這個問題,雖然最終還是我自己發現discuz的這個Bug,但是還是非常感謝康盛的虛擬主機技術人員,他們非常盡職,而且服務器也非常穩定,用康盛的主機一年以來只碰到過兩次持續時間不超過半小時的服務器被DDOS攻擊和一次MYSQL故障,相對其他IDC來說穩定性已經非常好了,推薦大家使用康盛的IDC。