與其說 Drupal 功能強大有彈性,倒不如說因為有太多玩家為其開發各類功能的模組 (modules),而使得網站的客製化 (customization) 與個性化大幅提昇。 例如 View, CCK 等重量級的模組,很難想像若不安裝這兩個基礎模組,Drupal 網站該如何運作設定啊。
為了讓網站功能更形強大多樣化,網站管理者往往需要安裝到數十個之多的模組。 說實話, Drupal 的模組設計,個人覺得甚為不欣賞。 雖然它有很大的優點是容易開發,且容易與核心 (kernel) 整合;但模組與模組之間的相依性 (dependency)太重了,會因模組的更換而連動影響到相關連的模組,而導致這些模組所提供的功能並不穩定。更甚者,大版本的更新,如從 4.X, 5.X, 6.X, 7.X 等的升級,所有模組均無法順應升級到下一大版,只能重新安裝支援該版本的模組,這實在相當不合理。
上述是題外話,算是對 Drupal 開發一個小小地抱怨 (當然,更期許的是,Drupal 的結構設計能更形有彈性,那可就相當完美了)。
現在較頭痛的一個問題是,安裝了太多模組後,效能與穩定性往往會被影響到。 以我來說,目前安裝了近 20 個模組,雖然功能尚稱穩定,不過常常會遇到在管理頁安裝某些模組後,就停滯在該網頁運轉許久,然後就出現 空白頁 (Blank Page),使得我經常需要去資料庫刪除掉該安裝的模組,移除掉該模組檔案,再重新開啟模組管理頁,再重新試著安裝……,實在令人困擾。
這一類的問題,當然就是要透過 Google 找 How-to Solution 了,或者應該是要至 Drupal 的官方網站論壇找尋答案了。 這裡: The White Screen of Death (Completely Blank Page)。 整理了許多引起 Blank page 的可能原因與建議的解決方案。
如何找出引起空白頁的錯誤訊息? 一般就是需要查看 apache 的 error log 了。 像我因為安裝模組時所引起的空白頁,在查看了 error log 後看到的錯誤訊息如下:
Maximum execution time of 30 seconds exceeded in ...(某個模組所在的路徑與執行檔名) |
原來是執行模組安裝時超過了設定於 php.ini 的預設執行時間 (default 為 30 秒)。 一般來說當然就是至 php.ini 內去更改該設定了:
max_execution_time = 60 |
不過如果網站是租借在 ISP,那麼 php.ini 往往是不允許被用戶更改的。 所以比較普遍的一個解決方式,就是至 drupal 目錄下的 sites/default/settings.php 檔案 (預設為 Read Only,先更改可以寫入的權限後再改回),然後找出有一段是 php setting 的程式區塊,在其下新增如:
ini_set('max_execution_time', 0); |
設為 0 的意思是忽略掉檢查執行的時間,當然也可以設為如 60, 120 (秒)的預設最大執行時間。
對了,另外也常引起空白頁的一個常見原因是,PHP 可供執行程式的記憶體不足。 可以透過 Drupal 管理頁→報告→狀態報告的資訊中得知,ISP 提供預設的 PHP 記憶體限制為多少。 一般在 32MB 以下就太少了,要執行 Drupal 許多模組,尤其是如 Image 影像處理的模組,則會常引起錯誤。 建議最好是能到 64MB,當然能爭取越大越好。 再來就是在上述同一個檔案 (setting.php)內,新增:
ini_set('memory_limit', '32M'); |
建議以上兩行都加入,如此在管理頁管理如模組等新增事項時,比較不容易出問題。