8

我有一个多维数组,它由 426 个较小的数组组成,它还包含 4 个属性。下面是 426 个数组之一的示例...

    array( //Main array
          0 => array( //1 of 426 arrays
               'name' => 'Danny', 
               'email' => 'your@email.com', 
               'picture_url' => 'http://www.website.com', 
                'score' => 89
          ),
    )

我将这个带有 jquery ajax 函数的数组发布到一个 php 文件中,然后将它们添加到一个数据库中......我的问题是,当它发布到 php 文件时,该数组似乎被截断了。只有大约一半的数组实际上到达了 php 文件......

这使我相信通过 ajax 发布时可能存在文件大小限制。但是,我的数组的大小似乎相对较小..

我在 WAMP 上运行我的应用程序..

任何人都可以阐明可能发生的事情吗?

更新:

我像这样发布我的数组:

$.ajax({
  type: "POST",
  url: "invite_friends.php",
  data: {
    theID: me.id,
    friends: multidimensional_array //This is the array <---
  },
  success: function(data, textStatus, jqXHR) {
    return console.log(data);
  },
  error: function(jqXHR, textStatus, errorThrown) {
    return alert("Error: Oops, there has been a problem");
  }
});

我像这样检索我的数组(在invite_friends.php中)..

if($_POST['friends']) {
    $friends = $_POST['friends'];   
} else {
    $friends = FALSE;
} 
4

4 回答 4

16

您需要打开php.ini文件并设置(或创建)这一行:

max_input_vars = 1000000

max_input_vars默认值为 1000,这将在 1000 个元素处截断一个数组。只需将其更改为一个非常高的数字(在我的情况下,我需要将其设置为一百万)。

来自 PHP 手册:

可以接受多少个输入变量(限制分别应用于 $_GET、$_POST 和 $_COOKIE 超全局变量)。使用该指令可以降低使用哈希冲突的拒绝服务攻击的可能性。如果输入变量多于该指令指定的数量,则会发出 E_WARNING,并从请求中截断更多输入变量。此限制仅适用于多维输入数组的每个嵌套级别。

请记住:正如手册所述,设置此默认限制是为了防止拒绝服务攻击。

希望这会有所帮助,即使这是一个老问题。

于 2012-10-13T20:46:18.300 回答
7

您应该在客户端将所有数据转换为 json 格式并将其作为文本发送。

var jsonDataString = JSON.stringify(data)
//data - array, associative array, any other variables

$.ajax({
...
    data: {
        friends: jsonDataString,
    }
...
});

在服务器端只需解码 json 文件。

<?php
...
$friendsJsonString = $_POST['friends'];
$friends = json_decode($friendsJsonString);
...

由于安全风险,更改 php.ini 不是一个好主意。

于 2016-07-03T12:18:01.987 回答
1

我有完全一样的问题。

$.ajax({data:{x:x,y:y}});

最后事实证明,其中一些值是日期格式(对象)。当它们转换为简单类型(字符串或整数)时,问题就解决了。希望这能有所帮助。

于 2016-06-14T23:01:46.897 回答
0

尝试在 .htaccess 和 max_input_time 中将 php_value post_max_size 设置为至少 16M,以免超时。

php_value post_max_size 16M
php_value max_input_time 4000
于 2012-09-17T16:04:38.213 回答