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

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作用一样,只是作用在单一程式) :

#  PHP超过最常执行时间(Fatal error: Maximum execution time of 30 seconds exceeded)
#  Fatal error: Maximum execution time of 30 seconds exceeded when try to open phpmyadmin

这让我想起之前好像有测试过ini_set() 这个变更php.ini 设定的函数, 检查程式开始处果然发现这个测试过后忘记拿掉的程式码, 设定值刚好就是120 秒, 难怪!

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

拿掉这行后再次执行爬虫程式就没有逾时问题了(第一次跑花了270秒,因为每一笔都要create table三次,后续大都是update运算就不需要这么久了,大约23秒).

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

以上纪录希望提醒自己以后别再犯这种乌龙错误了.

参与评论