2012-09-17 39 views
5

Tôi có một mảng đa chiều, trong đó bao gồm 426 mảng nhỏ hơn, mà cũng bao gồm 4 thuộc tính .. Dưới đây là một ví dụ về một trong 426 mảng ...Mảng bị cắt nhỏ trên bài đăng ajax. Giới hạn gửi bài của Ajax?

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

tôi gửi bài mảng này với jquery của ajax chức năng vào một tập tin php, mà thêm chúng vào một cơ sở dữ liệu ... Vấn đề của tôi là mảng có vẻ được cắt nhỏ ra khi nó được đăng lên tập tin php. Chỉ khoảng một nửa mảng thực sự đạt đến tệp php ...

Điều này đã khiến tôi tin rằng có thể có giới hạn kích thước tệp khi đăng trên ajax. Tuy nhiên, kích thước của mảng của tôi có vẻ là tương đối nhỏ ..

Tôi đang chạy ứng dụng của tôi trên wamp ..

bất cứ ai có thể làm sáng tỏ những gì có thể xảy ra?

UPDATE:

tôi gửi bài mảng của tôi như vậy:

$.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"); 
    } 
}); 

Và tôi lấy mảng của tôi (trong invite_friends.php) như vậy ..

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

Làm thế nào để bạn đăng mảng của mình? Bạn có thể chia sẻ mã không? – Tchoupi

+0

Khi bạn nói bài viết bạn có nghĩa là có được? – Erik

+0

Theo w3schools.com (vâng, tôi biết: http://w3fools.com) GET có giới hạn kích thước, nhưng POST thì không. – 11684

Trả lời

13

Bạn cần phải mở tập tin php.ini của bạn và thiết lập (hoặc tạo) dòng này:

max_input_vars = 1000000

max_input_vars có một giá trị mặc định là 1000, mà sẽ cắt đứt một mảng tại tổng 1000 yếu tố . Chỉ cần thay đổi nó thành một con số thực sự cao (trong trường hợp của tôi, tôi cần thiết để đặt nó đến một triệu).

Từ Manual PHP:

Có bao nhiêu biến đầu vào có thể được chấp nhận (giới hạn được áp dụng cho $ _GET, $ _POST và $ _COOKIE superglobal riêng). Sử dụng chỉ thị này giảm thiểu khả năng tấn công từ chối dịch vụ sử dụng các xung đột băm . Nếu có nhiều biến đầu vào hơn chỉ định bởi chỉ thị này, E_WARNING được phát hành và các biến đầu vào tiếp theo là bị cắt bớt từ yêu cầu. Giới hạn này chỉ áp dụng cho mỗi mức độ làm tổ của mảng đầu vào đa chiều.

Lưu ý: Như hướng dẫn nói, giới hạn mặc định này được đưa ra để ngăn chặn tấn công từ chối dịch vụ.

Hy vọng điều này sẽ giúp mặc dù đây là câu hỏi cũ.

+0

Ah có, cảm ơn bạn. Bạn là một người tiết kiệm cuộc sống. – Danny

+0

Bạn được chào đón! – FastTrack

0

thiết lập Thử php_value của bạn post_max_size đến ít nhất 16M trong .htaccess và max_input_time của bạn để bạn không bị mất thời gian.

php_value post_max_size 16M 
php_value max_input_time 4000 
+0

Tôi đã thêm chúng vào htaccess của tôi và thay đổi tập tin php ini của tôi, và tôi sợ điều này đã không giúp đỡ. – Danny

+0

bạn có thể thử lấy toàn bộ mảng bài và lưu nó vào một tập tin bằng cách sử dụng bàn điều khiển của bạn chỉ để kiểm tra lớn như thế nào là mảng bạn đang gửi – Alex

+0

Xin lỗi vì phản ứng muộn, đã được ra khỏi văn phòng cho đến khi buổi sáng. Tôi đã đặt tất cả các nội dung của mảng trong một tập tin văn bản, và kích thước là 48 KB – Danny

1

Tôi gặp vấn đề tương tự.

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

Cuối cùng, một số giá trị là định dạng ngày (đối tượng). Khi chúng được chuyển đổi thành các loại đơn giản (chuỗi hoặc số nguyên), vấn đề được giải quyết. Hy vọng điều này có thể giúp đỡ.

4

Bạn nên chuyển đổi tất cả dữ liệu của mình ở định dạng json ở phía máy khách và gửi dưới dạng văn bản.

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

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

Ở phía máy chủ chỉ giải mã tệp json.

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

Thay đổi php.ini không phải là một ý tưởng tốt vì những rủi ro bảo mật.

Các vấn đề liên quan