首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP set_time_limit() 動態調整腳本執行時間限制

     編輯:PHP 相關知識

函數定義

  • $seconds = 0:移除時間限制(無限執行)。
  • $seconds > 0:設定最大執行秒數。
  • 每次呼叫會重置計時器(從零開始倒數)。

運作機制

安全模式限制

  • PHP 安全模式(已於 PHP 5.4 移除)下 set_time_limit() 無效。
  • 現代 PHP 若在 php.ini 設定 max_execution_time 為硬性限制(搭配 disable_functions 禁用 set_time_limit),則無法調整。
  • CLI 模式預設 max_execution_time = 0(無限制)。

常見使用場景

1. 長時間批次處理(匯入、報表、同步)

 100 * 1024 * 1024) {
        gc_collect_cycles();
    }
}

2. 迴圈中動態延長(避免單次請求超時)

query('SELECT * FROM large_table');
while ($row = $stmt->fetch()) {
    set_time_limit(30); // 每筆重置 30 秒
    heavyProcess($row);
}

3. 配合 ignore_user_abort() 背景任務

替代方案:CLI 執行長任務

Web 請求受限於 HTTP 超時、Proxy 超時、瀏覽器超時,長任務建議:

  1. Web 端寫入任務佇列(Redis/RabbitMQ/Database)。
  2. CLI Worker 消費佇列執行(無時間限制、可監控、可重試)。
  3. Web 端輪詢/WebSocket 回報進度。

結語

set_time_limit() 可動態調整/移除執行時間限制,每次呼叫重置計時器。Web 環境受多層超時限制,**長任務首選 CLI + 佇列架構**。僅在無法避免的同步長請求中使用 set_time_limit(0) 搭配 ignore_user_abort(true)。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved