近日 Drupal 6 的一些雞毛蒜皮大小事

最近管理的 Drupal 6 網站遇到了一些奇怪的狀況,處理的過程中也學到一些東西,簡單記錄一下。

首先是在回應時,某些回應內容會產生奇怪的錯誤。但那些內容若是放在貼文中,就沒有問題。或是先貼個簡單的回應,然後進入編輯,改成先前會有問題的回應內容,此時也沒有問題了。總之,這情況只發生在新張貼「回應」,而且只有某些情況才會有錯誤。

【系統更新篇】

因為情況很詭異,一時之間也不知如何下手,所以首先想到是:「要不要先放著,等升級到 Drupal 8 也許就好了?」

會這樣想,主要是因為 Drupal 6 已經壽終了,官方沒有繼續在開發及更新。至於為什麼是 Drupal 8 而不是 7 呢?因為 8 比較新嘛,而且它宣稱以行動裝置優先,也就是說,採用這個版本就不用額外擔心手機與平板的使用者,因為系統都已經考慮到了。

雖然現在還沒時間研究更新的問題,還是忍不住想抽空看一下 Drupal 8 長什麼樣子。於是下載了「TWAMP 麻瓜架站包 2016.520 霧島就職紀念版」,試架了一下,沒什麼特別困難,的確在行動裝置效果也不錯(其實我只是把瀏覽器縮小模擬看看而已),的確是響應式設計的網頁。

這個版本直接支援所見即所得的編輯界面(WYSIWYG),不過實在很陽春,我在 Drupal 6 安裝的版本就不知比它漂亮好用多少倍,這已經在我心中扣了不少分了。

再稍為研究由 Drupal 6 更新至 Drupal 8 的方法,發現這種升級還沒有完全準備好,有些模組只算是實驗性質,我挑了一個小站測試了一下,果然無法完全升級,有好些地方還有問題,這可麻煩了。

幾番斟酌考慮,打算暫時只升級到 Drupal 7 好了。因為變化比較小,似乎比較可以安全升上去,而且 Drupal 7 也有一些版型是響應式的,應該也能支援行動裝置,Drupal 7 的成熟度應該也蠻可以信任的,不像 D8 (用簡稱好了,一直打字好累) 好像還不夠成熟,我想這樣是比較能接受的方案。

【程式捉蟲篇】

升級應該暫時也還沒空進行,所以就想到來除錯好了。

這種網站的除蟲,實在很難進行,我是把 D6 的 php 原始程式陸續很多中斷點,因為無法即時呈現內容,所以採用的方法是在那些中斷點把變數存到記錄檔中,再來比對錯誤的情況與正常的情況。

就這樣不斷在程式中插入中斷點、上傳程式到網站,執行會錯誤的情況,然後下載記錄檔來比對。就這樣不斷的追蹤進去,終於發現一些端倪,看出有特別狀況的地方了。

又經過幾番細心的比對,結果卻發現差異是一開始傳入的資料就不同。也就是 $_GET 和 $_POST 的內容一開始就不對勁了。

原來問題並不是程式沒有正確處理傳入的內容,而是內容根本沒有傳入。

再仔細分析,主機原來一開始就給了 403 Permission denied 的錯誤訊息,是因為程式本身包裝過這類錯誤訊息,所以才沒有在一開始就看出來,真的是白跑了好多冤枉路。

【主機安全篇】

繼續網路爬文,才知道這類訊息是系統的安全設定,可以試著關掉,也就是在 .htaccess 檔案中加上如下內容。

<IfModule mod_security.c>
  SecFilterEngine Off
  SecFilterScanPOST Off
</IfModule>

<IfModule mod_security2.c>
  SecFilterEngine Off
  SecFilterScanPOST Off
</IfModule>

有的人只寫第一組,有人則建議二組都寫,這是關掉 mod_security 1.x 版及 mod_security 2.x版 的設定。

不過也有但書,如果關閉這些,日後安全更新就要儘早執行,以免安全有漏洞。

設定之後若出現 500 的錯誤,那就要與主機商聯絡才行了,因為有些會設定成無法關閉。

我加上二組之後,果然出現 500 錯誤訊息。如果只加第一組,則沒有錯誤訊息,但先前的錯誤依然存在,沒有任何幫助。

在用盡一切方法之後,只好用破英文開始與主機租用商聯絡,總算在數封信往來之後,他們成功的把我的問題解決掉了。

目前就暫時用下去,等到有較多的空閒時,再來正式研究 D6 升級 D7 的問題了。

重要度:
文章分類:
電腦標籤:

發表新回應