我有一个非常大的html表单(包含行的表,其中包含多个输入),我需要通过POST请求提交给PHP脚本.问题是PHP的$ _POST超全局中没有一些值没有出现.
我检查(使用Firebug扩展),这些值实际上是由浏览器发送到服务器的.
$ _POST被填充,但有些值只是缺失.
我检查了什么是原始请求使用:
$raw_post = file_get_contents('php://input');Run Code Online (Sandbox Code Playgroud)
并且返回的字符串具有值.它们只是没有解析成$ _POST数组.我注意到的奇怪的是,似乎php://输入值在一定长度后被切断,其余的字符串不会通过$ _POST.
我想到了post_max_size和memory_limit并将它们设置为大值:
memory_limit = 256M
post_max_size = 150M
但根据php文档,如果请求的大于post_max_size,$ _POST不应包含任何值.
由于形式和请求的大尺寸我不能在这里发布,但我可以发布用于调试问题的PHP脚本:
var_dump($file = file_get_contents('php://input'));
var_dump($_POST);
//... then i parsed the $file
Run Code Online (Sandbox Code Playgroud)
服务器版本:Apache/2.2.9(Debian)
PHP版本:PHP 5.3.2-0.dotdeb.2
可以enyone解释这种奇怪的PHP行为的原因,我应该怎么做(更改PHP设置,代码?)在处理表单时使用$ _POST数组?
编辑:要明确:不仅缺少价值观.$ _POST也不包含这些键.
原始帖子的片段:
t_dodparam%5B198%5D=&t_dodparam2%5B198%5D=&t_kolejnosc%5B198%5D=199&n_indeks=201&n_wartosc=testtesttestRun Code Online (Sandbox Code Playgroud)
密钥't_dodparam'在post中,它有密钥198.缺少其余的参数(ex t_dodparam2在post中,但它没有198这样的密钥,并且$ _POST中没有n_wartosc这样的密钥)