首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >$_POST数组变量被截断

$_POST数组变量被截断
EN

Stack Overflow用户
提问于 2012-10-02 04:13:22
回答 2查看 4.8K关注 0票数 6

我在Apache2.0中使用的是PHP5.3.8。我也在使用Symfony 2,但这不是脚本失败的地方。我有一个带有数组变量的表单:

代码语言:javascript
复制
<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 ),我这样做:

代码语言:javascript
复制
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();

基本上,它只保留数组中的第一个变量。如果我将变量的名称从porole改为barole,那么$_POST输出:

代码语言:javascript
复制
array(1) {
  ["po"]=> array(1) { ["name"]=> string(9) "Developer" },
  ["ba"]=> array(1) { ["role"]=> string(9) "ROLE_USER" }
}

我发现可能导致此问题的典型问题是由于以下php.ini配置造成的,我还给出了我的值:

代码语言:javascript
复制
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组件。

另外,我也不想重写表单变量和数组(例如,poname到po_name),因为表单是由Symfony自动生成的,这似乎是PHP应该能够处理的一个基本特性。

有人知道这个问题吗?

PS:这类似于here中描述的问题。此外,这个问题发生在Suse的同一个版本(SUSE 11 )上。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-10-05 03:23:00

最后,我们决定将我们的PHP版本更新为更新的版本(5.3.15),它现在运行良好。因此,这无疑是一个问题,这个5.3.8,至少是我们的版本。

票数 1
EN

Stack Overflow用户

发布于 2012-10-02 06:39:11

你的建议对我很有用。完整测试代码:

代码语言:javascript
复制
<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>

带有“一”和“二”值的结果片段:

代码语言:javascript
复制
po%5Bname%5D=one&po%5Brole%5D=two

array(1) {
  ["po"]=>
  array(2) {
    ["name"]=>
    string(3) "one"
    ["role"]=>
    string(3) "two"
  }
}

我的PHP:

代码语言:javascript
复制
PHP Version 5.3.3-7+squeeze14
CGI/FastCGI
Apache/2.2
Suhosin Patch 0.9.9.1

这里没有任何问题,所以它应该很明显地起作用。如果这个测试代码不适用于您,我最好的选择是您所拥有的版本中的PHP bug (或者某个看似无关的功能中的一个bug,在任何地方都没有提到)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12684449

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档