今天写代码发现了php的函数ini_set在设置页面最大执行时间出现了一些问题,就是配置无效,然后我猜想会不会跟apache的配置有关,我的环境是 apache,使用了 fcgid_module 模块,php 就是 php-cgi.exe 这样,然后我就去测试了。
如图apache的一些配置:
如上图,我设置了页面的最大执行时间为 10 秒,就是 FcgidIOTimeout 10 和 FcgidIdleTimeout 10 这个配置
然后PHP代码 设置睡眠11秒,超过apache里面配置的10秒
页面是这样的,服务器报错 500:
接着继续改php代码,设置睡眠 9秒,小于apache 配置文件里配置的10秒
页面可以访问
接着继续改php代码,这次改的是 ini_set 这个设置为小于 10秒的
页面是这样,发现好像是有点效果的,只要 ini_set('max_execution_time',time); 设置的值小于 10,也就是apahce配置文件里面配置的,就可以,或者超过的话就以 apache 里面设置的最大值计算
目前我的总结就是 在apache中使用了fcgid_module 模块 LoadModule fcgid_module modules/mod_fcgid.so ,注意里面的 最大执行时间,php代码里面用代码 ini_set() 设置的最大执行时间就是这里配置的,小于的话好像是有效果的。
部分配置信息
<IfModule fcgid_module>
#################### php 多版本 start ##########
#LoadModule fcgid_module modules/mod_fcgid.so
#### 在文件扩展名与特定的处理器之间建立映射(一旦将下面定义放在你的http.conf文件中,所有包含.fcgi,.php扩展名的文件,都会被当成是FCGID程序)
AddHandler fcgid-script .fcgi .php
#### php.ini文件位置
# FcgidInitialEnv PHPRC "C:/web/php/php5.6"
#### 设置PHP_FCGI_MAX_REQUESTS大于或等于 FcgidMaxRequestsPerProcess ,防止php-cgi进程在处理完所有请求前退出
FcgidInitialEnv PHP_FCGI_MAX_REQUESTS 1000
#### php-cgi每个进程的最大请求数
FcgidMaxRequestsPerProcess 1000
#### php-cgi最大的进程数
FcgidMaxProcesses 15
#### 最大执行时间
FcgidIOTimeout 10
FcgidIdleTimeout 10
#### 在给定的文件扩展名与特定的内容类型之间建立映射(一旦将下面定义放在你的http.conf文件中,所有包含.php扩展名的文件,都会被当成是PHP类型的程序)
AddType application/x-httpd-php .php
#### 每个虚拟主机可以最大开启多少个FCGI进程
# FcgidMaxProcessesPerClass 100
#### 定义cgi请求的长度, 上传文件的最大尺寸 100MB
FcgidMaxRequestLen 104857600
#################### php 多版本 end ##########
</IfModule>