<?php $start_time = microtime(true); for ($i=0;$i<100000000;$i++){}; $end_time = microtime(true); echo '循环执行时间为:'.($end_time-$start_time).' s';
1.延长接口时长
PHP设置脚本最大执行时间的三种方法
1、在php.ini里面设置(用过)
max_execution_time = 120;
2、通过PHP的ini_set函数设置
ini_set("max_execution_time", "120");
3、通过set_time_limit 函数设置(用过set_time_limit(0);)
set_time_limit(120);
以上几个数字设置为0则无限制,脚本会一直执行下去,直到执行结束。
所以,需要长时间执行的脚本,一般在php代码开头处添加如下代码就可以了
set_time_limit(0);
set_time_limit无效处理方案:
当你发现以上方案无效后,需要按以下步骤进行检查。
第一步:查看php.ini的 safe_mode = off,safe_mode的值是否是off,为on不能修改php最大执行时间的,值为on只能通过php.ini配置文件进行修改。
第二步:检查装载php的进程执行时间设置,这里以最常用的php-fpm为例,查看php-fpm的request_terminate_timeout设置为0(有用,原来是100,设置完管用),上面提到的三种方式增加执行时间不能超过改设置。
我的服务器设置完后,还是502,所以估计是服务器性能问题:
php-fpm.conf有两个至关重要的参数,一个是”max_children”,另一个是”request_terminate_timeout” 我的两个设置的值一个是”40″,一个是”900″,但是这个值不是通用的,而是需要自己计算的。 计算的方式如下: 如果你的服务器性能足够好,且宽带资源足够充足,PHP脚本没 有系循环或BUG的话你可以直接将”request_terminate_timeout”设置成0s。0s的含义是让PHP-CGI一直执行下去而没有 时间限制。而如果你做不到这一点,也就是说你的PHP-CGI可能出现某个BUG,或者你的宽带不够充足或者其他的原因导致你的PHP-CGI能够假死那 么就建议你给”request_terminate_timeout”赋一个值,这个值可以根据你服务器的性能进行设定。一般来说性能越好你可以设置越 高,20分钟-30分钟都可以。由于我的服务器PHP脚本需要长时间运行,有的可能会超过10分钟因此我设置了900秒,这样不会导致PHP-CGI死掉 而出现502 Bad gateway这个错误。
而”max_children”这个值又是怎么计算出来的呢?这个值原则上是越大越好,php-cgi的进程多 了就会处理的很快,排队的请求就会很少。设置”max_children”也需要根据服务器的性能进行设定,一般来说一台服务器正常情况下每一个php- cgi所耗费的内存在20M左右,因此我的”max_children”我设置成40个,20M*40=800M也就是说在峰值的时候所有PHP-CGI 所耗内存在800M以内,低于我的有效内存1Gb。而如果我的”max_children”设置的较小,比如5-10个,那么php-cgi就会“很 累”,处理速度也很慢,等待的时间也较长。如果长时间没有得到处理的请求就会出现504 Gateway Time-out这个错误,而正在处理的很累的那几个php-cgi如果遇到了问题就会出现502 Bad gateway这个错误。
一、php post数据丢失
1、前端处理数据 将不需要的数据在前端过滤,选择需要的的数据提交而不是将所有数据都传过去
2、前端将整个数据转换为JSON字符串(灰常管用) 前端传值: var resultinfo = JSON.stringify(data);
1).后端接收: //前端数据量太大 以字符串形式提交过来以后 转数组 $tempData = html_entity_decode($data); $data = json_decode($tempData, true);
3、修改php.ini max_input_vars = 5000 //重启服务器。(改后没有效果,不知道原因,原来传的数据数组157,改前改后都是125)
发表评论 取消回复