php.ini 中缺省的最长执行时间是 30 秒,这是由 php.ini 中的 max_execution_time 变量指定,倘若你有一个需要颇多时间才能完成的工作,例如要发送很多电子邮件给大量收件者,或者要进行繁重的数据分析工作,服务器会在 30 秒后强行中止正在执行的程序,如何解决这个问题呢。
最简单当然是修改 php.ini 中 max_execution_time 的数值,不过不是所有人都有权修改 php.ini,例如使用网页寄存的开发人员,服务器上的 php.ini 由很多网站共同使用,所以不能随意修改。
另一个办法是在 PHP 程序中加入 ini_set(‘max_execution_time’, ‘0’),数值 0 表示没有执行时间的限制,你的程序需要跑多久便跑多久。若果你的程序仍在测试阶段,推荐你把时限设置一个实数,以免程序的错误把服务器当掉。

复制代码代码如下:
<?php
//max_execution_time=100;
ini_set(“max_execution_time”, 1); //用此function才能真正在运行时设置
for($i=1; $i< 100000; $i++)
{
echo “No. {$i}n”;
echo ‘<br />’;
flush();
}
?>

同时可以使用ini_get把原来设置的max_execution_time保存下来,在进行完操作时回复原来的设定值。
在这里简单记录下~

 

 

前段时间参与开发一个APP的API,其中有一个功能就是将客户端的通讯录通过JSON ,POST请求API,期初在测试的时候没发现什么问题,后来有个客户测试的时候出现上传的数据不完整,报出异常错误。后来排查日志,发现post接受到的数据不完整。不管一次传递1000条还是2000条,日志里面只显示300多条记录。

经过了一下午的折腾,最后发现post过来的json数据包是被PHP默认截断了。原因跟一个参数有关系。 php.ini 文件里的  max_input_vars 。这个是PHP5.3.9之后开始增加的一个变量。

max_input_vars,指的是表达提交的数量,默认值为 1000。官方添加这个变量的目的是为了更好的保护服务器不受攻击。避免堵塞。

修改完之后,需要修改重启一下php-fpm

service   php-fpm  stop

service   php-fpm  start

重启php-fpm之后,max_input_vars就生效,是不是问题就解决了呢?