【问题标题】:PHP/JSON: $_POST array is received incompletePHP/JSON:$_POST 数组接收不完整
【发布时间】:2012-04-22 11:07:59
【问题描述】:

使用 $.post (JQuery) 作为 JSON 数组发布大约 100 行数据。 但由于某种原因,并非所有行都被接收到。

数据看起来或多或少是这样的(内容基本上是数字和小字符串):

rows = [["U", "0", "81949", 32 more...], ["U", "0", "81950", 32 more...] ..... ]

我发送数据的方式是:

$.post(url+"callback=?", { data : rows }, function(){}, "json");

如果我回显在本地版本中收到的行数 (count($_POST)),它会显示“100”,但在生产服务器上会显示“25”(每次都是相同的数量)。

在firebug中检查请求详细信息,它正确显示所有100个都已发送。

虽然它可能是 PHP "post_max_size" 值,但我将它设置为 "100M",我认为这已经足够了。

我很确定它必须与服务器设置有关,但我没有想法...... 提前致谢。

更新:

  • 生产服务器有 8GB 内存,大约使用了一半 它(这不是内存问题)。
  • 没有超时(所有过程大约在 3 秒内完成)。

【问题讨论】:

标签: php jquery arrays json post


【解决方案1】:

已经有一个公认的答案,但对于那些不使用 suhosin 的人来说,问题可能是“max_input_vars” php 设置较低。我的默认设置为 1000,这还不够。

【讨论】:

    【解决方案2】:

    您的生产服务器是否使用suhosin? Suhosin 通常是限制请求大小的罪魁祸首,包括 GET 和 POST。它们对 POST 和 GET 大小有不同的限制(事实上,我记得其中一个会影响另一个,因此都必须增加)。

    看看你的 phpinfo() 看看那里有没有关于 suhosin 的东西。

    可能影响您的 Suhosin 价值观:

    • suhosin.get.max_vars
    • suhosin.post.max_vars
    • suhosin.request.max_vars

    (+ 值和 var 长度的等价物)

    另外,如果你正在上传文件,那么这也受到 suhosin 的限制:

    • suhosin.upload.max_uploads(因此默认为 25)

    【讨论】:

    • 你是对的!我忘记了……我通常会删除 Suhosin,因为它之前也引起了其他问题。我只是忘了在这个新服务器上做这件事。非常感谢!你拯救了我的一天!
    【解决方案3】:

    查询数据有最大大小 - 请参阅here。 问题可能是 2 之一。正在接收部分数据,或者 PHP 在一定数量后删除数据。有关 PHP 中的此设置,请参阅 here

    【讨论】:

    • 谢谢,但正如我之前所说,“post_max_size”设置为 100MB。我认为它甚至没有使用 1MB。最大查询数据适用于 $_GET 没有 $_POST。
    • @lepe:查看@Bergi 发布的链接,您可能有mod_security 或类似的阻止完整请求。
    猜你喜欢
    • 1970-01-01
    • 2016-05-04
    • 2018-06-05
    • 2020-10-30
    • 2017-03-20
    • 1970-01-01
    • 2019-05-08
    • 2020-08-22
    • 1970-01-01
    相关资源
    最近更新 更多