最近升級了x2.0的補丁,發現普通用戶在下載附件的時候會出現‘抱歉,該附件無法讀取’的提示,但下載分已經扣了!搞得大家非常不滿。但管理員之類的不扣下載分的是可以下載的。
于是開始網上搜索了,發現也有類似問題,但不是路徑不對,就是附件本身有問題。 要么就是同樣的問題沒人解答。 沒辦法,只好自己想辦法了。
先是在 forum_attachment.php 里看了半天,確定那個提示是從這里報出的。報這個提示的情況有很多處,我遇到的是附件不存在, 奇怪? 附件不存在怎么管理員可以下載呢? 于是進一步跟蹤數據庫,終于發現了問題。 discuz 的附件是分表存放的,表名像這樣 pre_forum_attachment_0, pre_forum_attachment_1, 我這里共有0~9, 10個表,另外有一個表 pre_forum_attachment,保存了全是編號,像aid(附件ID),tid(帖子ID),uid(用戶ID),tableid(這個就是表示具體附件信息保存在哪個表中)。 于是我找出下載失敗的附件的id, 搜索 pre_fourm_attachment,得到tableid, 再從相應的附件表中查找, 發現沒有找到, 但在另一個附件表中找到了, 說明這個問題的原因是附件表中的tableid不同步造成的。 這樣的話解決方法就明朗了,就是同步tabeid。
解決方法就是執行幾條sql語句,像這樣:
方法有點土,執行了很多次類似的語句,注意其中的兩個數字要相同,否則麻煩大了。 執行后,問題解決。
PS: 我的版本是 discuz! x2, 安裝的時候表前綴是可以改的,所以你的表前綴可能不是 pre_,所以注意查看實際的表前綴。