我在PHP 2.0中使用PHP 5.3.8。我也在使用Symfony 2,但这不是脚本失败的地方。我有一个包含数组变量的表单:
<form action="/app_dev.php/admin/position/create" method="post">
<input type="text" id="po_name" name="po[name]" required="required" maxlength="50">
<input type="text" id="po_role" name="po[role]" required="required" maxlength="20">
</form>
直接在app_dev.php文件中(从问题中排除Symfony)我这样做:
echo file_get_contents("php://input"); // outputs: po%5Bname%5D=Developer&po%5Brole%5D=ROLE_USER
var_dump($_POST); // outputs: array(1) { ["po"]=> array(1) { ["name"]=> string(9) "Developer" } }
die();
基本上它只保留数组中的第一个变量。如果我将变量的名称从po [role]更改为ba [role],则$ _POST输出:
array(1) {
["po"]=> array(1) { ["name"]=> string(9) "Developer" },
["ba"]=> array(1) { ["role"]=> string(9) "ROLE_USER" }
}
我发现可能导致此问题的典型问题是由于以下php.ini配置,我还给出了我的值:
max_execution_time = 30
max_input_time = 60
max_input_nesting_level = 64
max_input_vars = 1000
post_max_size = 8M
upload_max_filesize = 2M
memory_limit = 128M
这些值似乎合理,我认为不会导致问题,但不能100%肯定。
我没有安装suhosin ,因为我读过它也会导致类似的问题。
它也类似于this problem,但给出的解决方案需要我重写HttpFoundation Symfony组件。
此外,我不想在没有和数组(例如 po [name]到po_name)的情况下重写表单变量,因为表单是由Symfony自动生成的,这似乎是一个基本的PHP应该能够处理的功能。
有人对这个问题有任何想法吗?
PS:这类似于here中描述的问题。此外,问题发生在相同版本的Suse(SUSE Linux Enterprise Server 11)上。
答案 0 :(得分:1)
你提出的建议对我来说很好。完整的测试代码:
<html>
<body>
<pre>
<?php
if (isset($_POST) && !empty($_POST))
{
echo file_get_contents("php://input");
echo "\n\n";
var_dump($_POST);
}
?>
</pre>
<form action="" method="post">
<input type="text" id="po_name" name="po[name]">
<input type="text" id="po_role" name="po[role]">
<input type="submit">
</form>
</html>
带有“一个”和“两个”值的结果摘要:
po%5Bname%5D=one&po%5Brole%5D=two
array(1) {
["po"]=>
array(2) {
["name"]=>
string(3) "one"
["role"]=>
string(3) "two"
}
}
我的PHP:
PHP Version 5.3.3-7+squeeze14
CGI/FastCGI
Apache/2.2
Suhosin Patch 0.9.9.1
这里没有问题,所以它应该清楚地工作。如果这个测试代码不适合你,我最好的选择是你所拥有的版本中的PHP错误(或者某些看似无关的功能中的错误,这些错误在任何地方都没有提到过。)
答案 1 :(得分:1)
我们最终决定将我们的PHP版本更新为更新版本(5.3.15),现在它运行正常。所以这肯定是5.3.8的问题,至少是我们的版本。