我有一个非常大的HTML表单(包含行的表格,其中包含多个输入),需要通过POST请求将其提交到PHP脚本。
问题是,一些值没有传递过来,在PHP的$_POST超全局变量中不存在。
我使用Firebug浏览器扩展程序检查发现这些值确实被发送到服务器。
$_POST得到填充,但一些值就是缺失了。
我使用以下命令检查原始请求:
$raw_post = file_get_contents('php://input');
返回的字符串具有值,但它们只是未解析为 $_POST 数组。我注意到的奇怪之处是,似乎 php://input 值在一定长度后被截断,剩余的字符串没有传递到 $_POST。
I thought about post_max_size and memory_limit and set them to large values:
memory_limit = 256M
post_max_size = 150M
but according to php documentation $_POST should not contain any values if request made is bigger than post_max_size.
由于表单和请求过大,我无法在此处发布它们,但是我可以发布我用来调试问题的PHP脚本:
var_dump($file = file_get_contents('php://input'));
var_dump($_POST);
//... then i parsed the $file
服务器版本:Apache/2.2.9(Debian)
PHP版本:PHP 5.3.2-0.dotdeb.2
有人能解释一下这种奇怪的PHP行为的原因吗?我应该怎么做(更改php设置、代码?)才能在处理表单时使用$ _POST数组?
编辑:明确一点:不仅值丢失了,$_POST也没有包含这些键。
例如原始邮寄片段:
t_dodparam%5B198%5D=&t_dodparam2%5B198%5D=&t_kolejnosc%5B198%5D=199&n_indeks=201&n_wartosc=testtesttest
在提交的数据中,键't_dodparam'存在且具有关键字198。其余参数缺失(例如t_dodparam2在post中存在,但没有关键字198,而$_POST中也不存在n_wartosc关键字)。
t_dodparam2[198]=''
或者t_kolejnosc[198]
,但它们没有包含在$_POST
中。正如Jean Hominal所指出的那样,&符号表示参数的结束,但这只是表明已经提交了空值(例如空文本字段)。 - jankes