欢迎!我白天是个邮递员,晚上就是个有抱负的演员。这是我的网站。我住在天朝的帝都,有条叫做Jack的狗。
一次性调用的数据太大,就会导致php运行超时,继而报错500Internal Server Error的可能,这里分享几种解决方法。
1,清缓存数据foreach ($data as $k => $v) { $num ++; if ($num == $limit) {//清空内存防止溢出 ob_flush(); flush(); $num = 0; } .......}2,分页循环数据
$userCount = D('model')->count();for($i = 0; $i < ceil($userCount/5000); $i++) { $begin = $i * 5000; $end = ($i + 1) * 5000; $userList = D('model')->field('key_name')->limit($begin,$end)->select(); foreach ($userList as $value) { ... }}3,添加程序开始部分修改配置文件
ini_set("max_execution_time", "500"); ignore_user_abort(true); set_time_limit(0); ini_set("memory_limit", "-1");4,修改apache配置文件
找到server/Apache/conf/Fchi.conf文件,把里面的数值调大
<Ifodule fegid modu1e>#此项数值的设置不能小于Fcgi daxRequestsPerProcessFcgidInitia1Env PHP_ FCGI MAX_ REQUESTS 100000#php-cgi最大请求数设置Fcgi dllaxRequestsPerProcess 100000#php-cgi最小请求数设置Fcgi dMinProcessesPerClass 0#php-cgi最大请求数设置Fcgi dllaxProcessesPerC1ass 50000#php-cgi最大的进程数,内存高的话可以增加此项Fcgi dllaxProcesses 100000#空闲超时过程的扫描间隔,与FcgidIdleTimeout对应, 每120秒进行一次检查Fcgi dIdl eScanInterval 12000#空闲的F astcgi程序在超过设置的时间后将会被杀死,- 般和上面的F cgidId1 eScanInterva1配合使用Fcgi dIdleTimeout 12000Fcgi dProcessLifeTime 36000#这是Fastcgi模块在win中试图连接-一个应用的时候设置的一 个最大的周期时间,当等待超过了这个时间将会超时Fcgi dConnectTimeout 18000Fcgi dBusyTimeout 10000邯astCGI的服务器通信超时,也就是最大执行时间,设置成900代表与程序通讯的最长时间是15分钟Fcgi dI0Timeout 18000#这是CGI输出缓冲区的大小Fcgi dOutputBufferSize 1024000000Http请求的最大长度,超过将出现500 Server Error.Fcgi dllaxRequestLen 1024000000#每个请求保存在内存中的最大尺寸,通常请求体被存储在内存中,超过的部分会存在临时文件。Fcgi dllaxRequestInllem 1024000000
