У меня возникла проблема, когда большие массивы данных, отправленные через POST с использованием AJAX, не превращаются в переменную $_POST
в PHP.Данные POST, усеченные между браузером и PHP
Пользователь загружает файл Excel/CSV через веб-форму и анализируется через AJAX. Этот конкретный пример содержит 775 записей с 13 полями/элементами. Добавление дополнительных полей и количество элементов в наборе данных составляет менее 11 000 элементов. Из исследования, которое я сделал по этому вопросу, 32-разрядные браузеры (например, Firefox, Chrome и т. Д.) Должны иметь возможность обрабатывать 4,29 миллиарда элементов, поэтому я не вижу размер данных в качестве проблемы, тем более, что ответ из загрузки файла содержит все элементы.
Проблема только поднимается, когда вся форма отправляется для проверки и ввода в базу данных. Проблема в том, что консоль на обеих Firebug и Chrome Developer Tools показывает, что весь набор данных представлен:
Выполнение var_dump
на $_POST
дает это:
php.ini имеет 'post_max_size'
набор до 200М. Даже 'upload_max_filesize'
установлен в 100M. Эта проблема возникает как в Firefox 32.0.3, так и в Chrome 37.0.2062.103 m, которые я тестировал лично и в других старых версиях (включая IE 10), которые тестировал UAT.
вызов AJAX является:
new wrapper.ajax('/t1.php', {
type: 'POST',
data: data,
form: $('form[name=oppForm]'),
success: function (response)
{
if (response.result)
{
window.location = response.result;
}
},
complete: function()
{
$("#submit").loading('done');
}
});
РНР является:
<?php
var_dump($_POST);
Любые мысли?
EDIT
После разговора с некоторыми другими разработчиками, я также проверил выход из php://input
и обнаружил, что она содержит все данные POST, что браузеры присылали, но о том, что данные не получал переведены $ _POST правильно. Однако он действительно работает, если я удалю 10 ключей из данных сообщения и отправлю 765 вместо 775.
Также проверьте 'max_input_vars' и' max_input_nesting_level' (последнее должно быть менее важным в вашем случае). А также проверьте, нет ли f.e. suhosin используется для запуска вашего PHP-кода, который имеет дополнительные ограничения в отношении безопасности входящих данных. – CBroe
Если вы работаете на Apache, есть также [limitrequestbody] (http://httpd.apache.org/docs/2.0/mod/core.html#limitrequestbody). – naneau
Один разработчик предложил посмотреть на разницу между «php: // input» и $ _POST. '? Php file_put_contents ('/ tmp/zelda4.log', print_r (file_get_contents (" php: // input "), true)); file_put_contents ('/ tmp/zelda5.log', print_r ($ _ POST, true)); ' И« php: // input »содержит все ожидаемое содержимое, которое браузеры заявляют, что они отправили, но $ _POST все еще не показывает все это. –