Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> 電腦軟體教學 >> 伺服器技術 >> 關於伺服器

PHP「Maximum execution time of 30 seconds exceeded」錯誤完整解決方案

編輯:關於伺服器

錯誤訊息

Fatal error: Maximum execution time of 30 seconds exceeded in F:\webs1\...

原因分析

PHP 預設腳本最大執行時間為 30 秒(max_execution_time)。當腳本執行超過此限制(如大量資料匯入、複雜報表產生、外部 API 呼叫緩慢),即拋出此致命錯誤並終止執行。

解決方法

方法一:修改 php.ini(全域生效,需重啟 Web 伺服器)

  1. 找到 php.ini(通常在 /etc/php/7.x/apache2/php.ini、C:\php\php.ini 或透過 php --ini 查詢)。
  2. 搜尋 max_execution_time。
  3. 將預設值 30 改大,例如 180(3 分鐘)或 300(5 分鐘)。
    max_execution_time = 180
  4. 儲存並重啟 Web 伺服器:systemctl restart php-fpm / systemctl restart httpd / iisreset。

方法二:在腳本中動態設定(僅影響當前腳本)

// 設定為無限制(謹慎使用,避免死循環拖垮伺服器)
set_time_limit(0);

// 或設定具體秒數
set_time_limit(300); // 5 分鐘

放在腳本最開頭或耗時操作之前。

方法三:.htaccess / Apache 虛擬主機配置(僅限 PHP 模組模式)

php_value max_execution_time 180

方法四:Nginx + PHP-FPM 環境需同步調整

修改 php-fpm.conf 或 Pool 設定:

request_terminate_timeout = 180

並同步調整 Nginx fastcgi_read_timeout:

location ~ \.php$ {
    fastcgi_read_timeout 180s;
    ...
}

根本優化建議(治本)

單純調大超時時間只能治標,長期應從以下方向優化:

  • 演算法優化: 減少不必要的迴圈、資料庫查詢優化(索引、分頁)。
  • 非同步處理: 耗時任務(匯出 Excel、發送郵件、視頻轉碼)放入佇列,由背景 Worker 處理,前端輪詢或 WebSocket 通知完成。
  • 分頁/分批: 大量資料分批處理,每批在時間限制內完成。
  • 硬體/網路: 確認資料庫、外部 API 回應速度;升級 SSD、增加記憶體、優化網路拓撲。

快速驗證


瀏覽器訪問,應在 5 秒後報錯;改為 set_time_limit(15) 則正常輸出。

Copyright © Windows教程網 All Rights Reserved