2017年11月28日 星期二

XAMPP 最大執行時間 (max_execution_time) 問題

今天繼續處理 PHP 專案, 發現爬蟲程式固定在執行 120 秒後就 timeout, 屢試不爽, 看這樣子應該是新安裝的 XAMPP 工具包裡的 PHP max_execution_time 設得太短了 :

Fatal error: Maximum execution time of 120 seconds exceeded in E:\xampp\htdocs\stock\lib\mysqli.php on line 512

參考 :

Maximum execution time in phpMyadmin

按 XAMPP 的 Apache 的 Config 鈕, 選 PHP (php.ini) 檢查 php.ini 設定, 發現 max_execution_time 早已設置為 5000 秒 (在第 383 行左右) 了啊, 怎麼會固定 120 秒就逾時呢?




;;;;;;;;;;;;;;;;;;;
; Resource Limits ;
;;;;;;;;;;;;;;;;;;;

; Maximum execution time of each script, in seconds
; http://php.net/max-execution-time
; Note: This directive is hardcoded to 0 for the CLI SAPI
max_execution_time = 5000 

瀏覽 http://localhost/dashboard/phpinfo.php 檢查 Loaded Configuration File 項目確實載入的設定檔為 E:\xampp\php\php.ini 沒錯, 照理講應該是 5000 秒才會逾時啊. 我把 XAMPP 關掉重開, 甚至電腦重開機都一樣無效, 傷腦筋.

最後在下面這篇看到 set_time_limit() 函數可用來指定一個 PHP 程式的最長執行時間 (與 php.ini 的 max_execution_time 作用一樣, 只是作用在單一程式) :


這讓我想起之前好像有測試過 ini_set() 這個變更 php.ini 設定的函數, 檢查程式開始處果然發現這個測試過後忘記拿掉的程式碼, 設定值剛好就是 120 秒, 難怪!

@ini_set("max_execution_time","120");

拿掉這行後再次執行爬蟲程式就沒有逾時問題了 (第一次跑花了 270 秒, 因為每一筆都要 create table 三次, 後續大都是 update 運算就不需要這麼久了, 大約 23 秒).

注意, set_time_limit(0) 是設定此程式不受逾時限制.

以上紀錄希望提醒自己以後別再犯這種烏龍錯誤了.


沒有留言 :