啟用大量模組後,儲存設定頁面出現空白、導航選單項目消失、點擊無反應。錯誤日誌顯示:
Fatal error: Maximum execution time of 30 seconds exceeded in database.mysqli.inc
Drupal 核心、模組安裝/更新、快取重建、資料庫 Schema 更新等操作在模組數量大時極度耗時,超過 PHP 預設 max_execution_time = 30 秒導致腳本中斷,留下不一致狀態 (快取未清、資料庫交易未完成)。
; php.ini
max_execution_time = 120 ; 或 300 秒視專案複雜度
; 重啟 Apache / PHP-FPM 生效
適用於開發環境、獨立主機、長期專案。
<?php
// settings.php 或特定操作前 (如 update.php、drush 指令)
ini_set('max_execution_time', 300); // 5 分鐘
// 或 0 代表無限制 (慎用)
ini_set('max_execution_time', 0);
在 Drupal settings.php 加入:
// settings.php
if (defined('MAINTENANCE_MODE') || strpos($_SERVER['SCRIPT_NAME'], 'update.php') !== false) {
ini_set('max_execution_time', 300);
}
操作完成後建議移除或註解,避免常態運行時無限制。
; my.cnf / my.ini (MySQL 設定檔)
[mysqld]
max_allowed_packet = 16M ; 預設 4M,大量資料寫入需調大
; 重啟 MySQL 生效
若錯誤訊息含 MySQL server has gone away 或 Packet too large,此方案有效。
drush en module_name -y、drush cr (清除快取)、drush updb (資料庫更新)。CLI 模式預設無時間限制,記憶體限制較寬鬆。Admin > Configuration > Performance 開啟頁面快取、區塊快取、壓縮 CSS/JS。ini_set('memory_limit', '256M'),大量模組載入需更多記憶體。max_execution_time ≥ 120 (或 CLI 0)memory_limit ≥ 256Mmax_allowed_packet ≥ 16M