The url portion of a request (GET and POST) can be limited by both the browser and the server - generally the safe size is 2KB as there are almost no browsers or servers that use a smaller limit.
本日碰到一个情形是,在客户端通过JS传大量的数据给做事端,PHP收到的数据会丢失,在确认了数据丢失后,我在google搜索后确认:理论上,在利用POST通报数据时,无论HTTP协议,还是浏览器都没有限定通报数据的大小。
The body of a request (POST) is normally limited by the server on a byte size basis in order to prevent a type of DoS attack (note that this means character escaping can increase the byte size of the body). The most common server setting is 10MB
那么PHP中哪些配置会影响到它可以吸收的POST数据的大小呢?这才是我们要谈论的重点。确切的说,影响PHP吸收POST数据大小的配置指令有下面三个,大部分人可能不太会把稳到第三个指令。
memory_limit 256M
post_max_size 20M
max_input_vars 2500
memory_limit限定了PHP可以利用的最大的内存。常日来说,这个值的设置可以大于即是post_max_size的值。实际上要远大于post_max_size的值。以是常日我们不太会考虑到它的影响,但是没考虑到不代表没影响。
post_max_size指令限定许可post给PHP的数据的最大值。这个也会影响到文件的上传。它的值要大于即是upload_max_filesize的值。以是,memory_limit也会影响到文件上传。常日,memory_limit>=post_max_size>=upload_max_filesize。
max_input_vars指令是PHP 5.4.16+版本引入的。限定PHP可以吸收的变量的个数。 $_GET, $_POST , $_COOKIE这三个任何一个变量数量都不能超过max_input_vars限定数值。这个限定是分别限定。也便是说不管是这三个超级变量,各自的变量数量没超过限值就可以,不是说全部加一起。不过要把稳的是,数组不是按一个变量算,而是按元素个数算。超过指天命量的数据将被截掉,而导致PHP收不到变量。
如果你碰到了这种情形,你可以修正这几个变量来调度你的PHP环境,至于如果修正PHP的配置则不在本文谈论范围。