今天接到客服部工作人员反馈的一个客户的问题,产品是允许用户添加一个产品属性的,而每个属性是由多个表单域组成 ,这样当每添加一个属性就等于添加了n个表单域,这个客户添加的非常的多,发现在提交保存的时候总是失败,提示其中一个表单元素的索引值不存在,经测试是发现服务端接收的一些表单域丢失了一部分。起初分析的是服务器接收的数据超出了php设置的max_post_size(其实当时已经设置了8M,足够使用了),修改了测试发现此问题仍然存在。后来将用户原来的一些添加的表单元素进行删除,再重新添加同样数据库表单域可以成功,但一旦超出一定数量的表单域就会发生丢失的情况,这个时候首先怀疑的是apache是否有类似限制接收隐藏域的指令,找了没有找到,紧接着在php中批到一个max_input_vars这个指令,意思就是说php中允许接收的最大表单域数据,到目前为止基本上是确定这个原因引起的了,奖其修改为2000,重启Apache,发现一切正常。
max_input_vars默认值为1000导致多表单提交失败
再看了下php-fpm的日志,有点信息可以参考了。
[25-Sep-2014 15:19:30] WARNING: [pool www] child 28329 said into stderr: "NOTICE: PHP message: PHP Warning: Unknown: Input variables exceeded 1000. To increase the limit change max_input_vars in php.ini. in Unknown on line 0"
提示input 变量个数超过1000,建议修改php.ini文件中的 max_input_vars,PHP从5.3.9开始增加一个变量 max_input_vars 用来限制提交的表单数量。
妈的,我这个功能(类似于phpmysqladmin功能,读取数据库表,然后能写入编辑,然后数据库字段有128个,然后每个字段有11个input框)大概有1400多个input,(多么痛的领悟,为毛这么吊,研发一个表搞这么多字段),
然后我在php.ini里面加入
max_execution_time = 30 ; Maximum execution time of each script, in seconds
max_input_time = 60 ; Maximum amount of time each script may spend parsing request data
max_input_vars = 2000
重启php-fpm后,功能正常了。看日志很重要。
总结:提起php中的max_input_vars 估计很少人知道这个这个指令,因为他的使用场景实在是太少了,在php.ini中这个指令的定义是指服务端最大可以接收的表单域的数量多少,默认是1000,这足够我们平时使用了。但仍然有一些特殊的情况下需要修改此值的大小。
电神魔傀2街机免费版 官方版v1.2.1
下载三国战纪2手游腾讯渠道服 安卓版v2.41.0.0
下载三国战纪2手游抖音渠道服 安卓版v2.41.0.0
下载三国战纪2折扣服 安卓版v2.41.0.0
下载叫我大掌柜小米版 安卓版v7.4.4
叫我大掌柜小米版是这款模拟经营类手游的渠道服版本,在此版本中
cooking fever正版 安卓最新版v23.0.2
cooking fever正版是一款非常好玩的模拟经营类手游
咖啡厅的生活故事 最新版v1.7
咖啡厅的生活故事是一款模拟经营游戏,玩家们在游戏中可以经营一
迅猛龙模拟器金币不减反增版 v1.1.8
迅猛龙模拟器无限金币版是一款动物模拟类游戏,玩家们将在游戏中
泽塔奥特曼升华器免广告版 v1.4
泽塔奥特曼升华器去广告版是游戏的破解版本,在该版本中为玩家去