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

phppost长度PHP阅读器经由过程POST最多可以传送多年夜的数据 Java

那么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的配置则不在本文谈论范围。