我有一个多维数组,它由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;
}
答案 0 :(得分:15)
您需要打开php.ini
文件并设置(或创建)此行:
max_input_vars = 1000000
max_input_vars
的默认值为1000,这将截断一个总数为1000的数组。只需将其更改为一个非常高的数字(在我的情况下,我需要将其设置为一百万)。
从PHP手册:
可以接受多少输入变量(限制适用于$ _GET, $ _POST和$ _COOKIE超全球分开)。使用此指令 减少使用哈希的拒绝服务攻击的可能性 碰撞。如果输入变量多于此指定的输入变量 指令,发出E_WARNING,进一步输入变量 从请求中截断。 此限制仅适用于每个嵌套 多维输入数组的级别。
请记住:正如手册所述,此默认限制已用于防止拒绝服务攻击。
希望这有帮助,即使这是一个老问题。
答案 1 :(得分:5)
您应该在客户端以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并不是一个好主意。
答案 2 :(得分:1)
我有完全相同的问题。
$.ajax({data:{x:x,y:y}});
最后,事实证明一些值是日期格式(对象)。当它们转换为简单类型(字符串或整数)时,问题就解决了。希望这可以提供帮助。
答案 3 :(得分:0)
尝试将.htaccess和max_input_time中的php_value post_max_size设置为至少16M,这样就不会有时间。
php_value post_max_size 16M
php_value max_input_time 4000