【发布时间】:2011-07-01 23:14:10
【问题描述】:
我有一个非常大的 html 表单(包含行表,其中包含多个输入),我需要通过 POST 请求将其提交给 PHP 脚本。 问题是 PHP 的 $_POST 超全局变量中没有出现某些值。
我检查了(使用 Firebug 扩展)这些值实际上是由浏览器发送到服务器的。
$_POST 被填充,但缺少一些值。
我使用以下方法检查了原始请求:
$raw_post = file_get_contents('php://input');
并且返回的字符串具有值。它们只是没有被解析为 $_POST 数组。我注意到的奇怪的事情是,似乎 php://input 值在一定长度后被剪切,并且字符串的其余部分没有通过 $_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
服务器版本: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' 在 post 中,它有 key 198。其余参数丢失(ex t_dodparam2 在 post 中,但它没有像 198 这样的键,并且在 $_POST 中没有像 n_wartosc 这样的键)
【问题讨论】:
-
你能给我们举一个缺少参数值的例子吗?
-
这里是原始帖子的片段:t_dodparam%5B198%5D=&t_dodparam2%5B198%5D=&t_kolejnosc%5B198%5D=199&n_indeks=201&n_wartosc=testtesttest。 t_dodparam[198] 在后值中,但其余部分缺失
-
“&”不是表示参数的结束和新参数的开始吗?
-
并且您的原始数据中没有名称为
198的参数 -
我的原始数据中有参数
t_dodparam2[198]='',或者t_kolejnosc[198],它们不包含在$_POST中。正如 Jean Hominal 指出的那样,& 符号表示参数的结束,但这只是表明已发布空值(例如空文本字段)