我有以下HTML / PHP页面:
<?php
if(empty($_SERVER['CONTENT_TYPE'])) {
$type = "application/x-www-form-urlencoded";
$_SERVER['CONTENT_TYPE'] = $type;
}
echo "<pre>";
var_dump($_POST);
var_dump(file_get_contents("php://input"));
echo "</pre>";
?>
<form method="post" action="test.php">
<input type="text" name="test[1]" />
<input type="text" name="test[2]" />
<input type="text" name="test[3]" />
<input type="submit" name="action" value="Go" />
</form>
如您所见,表单将提交,预期的输出是一个POST数组,其中包含一个数组,其中包含填充的值以及一个带有值“ Go”的输入“ action”(按钮)。但是,无论我在字段中输入什么值;结果总是:
array(2) {
["test"]=>
string(0) ""
["action"]=>
string(2) "Go"
}
string(16) "test=&action=Go&"
不知何故,名为test的数组将被清空,“ action”变量会使其通过。
我已经使用了Firefox的Live HTTP Headers扩展来检查POST字段是否已提交,并且确实提交了。来自实时HTTP标头的相关信息(在文本框中以值填充a,b和c):
Content-Type: application/x-www-form-urlencoded
Content-Length: 51
test%5B1%5D=a&test%5B2%5D=b&test%5B3%5D=c&action=Go
有谁知道为什么会这样吗?我很害怕这个,已经花了我很多时间...
更新:
我们已经在不同的服务器上尝试过此操作,在Windows机器上可以正常工作,在PHP版本5.2.4(带有Suhosin)的Ubuntu服务器上也可以,但是没有。它甚至可以在其他服务器上运行,也可以使用Ubuntu和相同的PHP版本,也可以安装Suhosin。
我已经比较了两个文件,这是输出(diff php.ini phps.ini
):
270c270
< memory_limit = 32M
---
> memory_limit = 16M ; Maximum amount of memory a script may consume (16MB)
415c415
< variables_order = "EGCSP"
---
> variables_order = "EGPCS"
491d490
< include_path = ".:"
1253a1253,1254
> extension=mcrypt.so
>
在这个phps.ini中,它是服务器所在的服务器,而php.ini是当前的服务器。看起来这里没有问题,对吧?