php.ini中常会触及到的'限制'

max_execution_time

php最大执行时间,php.ini中默认数值为30,即在页面执行30s后,服务器会直接强制终止页面的执行。

对于一般的页面,30s足够了,但对于有些需要直接利用php执行进行大量数据分析的页面,你就需要根据页面执行的效率,调整 max_execution_time 的值,当然尽可能改善你的算法,获得最佳页面执行效率。

max_input_vars

php最大提交表单(控件)数,php.ini中默认值为1000,即一个form表单post数据中所含控件数(input)不能超过1000个。

1000个input还不够用?人填得过来么?可能你会有这样的疑问,但在实际的编程过程中我的确遇到了这样的问题:上传一份excel表格文档,利用PHPExcel类库进行解析后输出到一个页面给用户进行确认,确认完按“提交数据”插入到数据库中,每一单元数据存放于form-input(hidden)中,input数量在200(行)*8(列)=1600,超过默认数量,结果每次插入数据库的都是前125条数据。

刚遇到这个问题时,我就在页面上直接输出了$_POST 的值,发现仅有125条记录,可以确定就是post传输出现的问题。在网上查到为数不多的类似问题信息,基本聚焦于php对post大小限制,但在php.ini中我发现post_max_size默认值为32M,post一份表单的数据量无论如何也不会超过32M,觉得问题应该不会是post的大小限制。我之后觉察到可能是对于控件的限制,终于找到了 max_input_vars 是对post控件的限制。然而在我本机装配的wamp的php.ini中还找不到 max_input_vars 的相关信息,只能自行添加。

1
2
3
4
5
6
7
8
9
; Maximum input variable nesting level
; http://php.net/max-input-nesting-level
;max_input_nesting_level = 64
max_input_vars = 5000; //默认1000
; Maximum amount of memory a script may consume (128MB)
; http://php.net/memory-limit
memory_limit = 128M

upload max filesize post max size

一个是对于上传文件最大的限制,一个是对于post最大的限制。

需要利用php post上传大文件时记得都要更改(最大文件值 <= upload_max_filesize <= post_max_size),不然文件会上传失败或者仅仅上传文件的一部分(比如:上传一个20M的文件test.zip,upload_max_filesize仅为10M,上传到服务器的很有可能是一个10M的test.zip)

max_input_time

此变量是以秒为单位对通过post、get方式接收数据时间进行限制,默认值为60,即60s。

如果应用程序所运行环境处在低速链路上,则可以增加此值以适应接收数据所需的更多时间。