Подтвердить что ты не робот

PHP/Apache/AJAX - ограничение POST?

Я пытаюсь отправить данные POST, которые составляют 2 миллиона символов (не двоичная строка) через ajax (jQuery), и он всегда выглядит пустым на стороне PHP. Вот мой код:

var string = "<data string that is 2M chars long>";
$.ajax({
    cache: false,
    type: 'POST',
    url: 'data.php',
    data: {'data_string': string}
});

На стороне PHP я получаю следующее сообщение об ошибке (при попытке получить данные из $_POST['data_string']):

Notice: Undefined index: data_string in data.php on line ...

Я проверил post_max_size в php.ini, и он установлен на 256M, которого должно быть более чем достаточно? Я в тупике и не уверен, что я делаю неправильно...

EDIT: если я делаю "string" небольшой объем данных (например, var string = 'test'), то $_POST["data_string"] возвращает test, как и ожидалось. Поэтому мне интересно, есть ли какой-то лимит данных, который я достигаю в Apache2, PHP или в самом браузере? Я использую Google Chrome 17.0.963.79

EDIT2: memory_limit = 256M в php.ini

EDIT3: max_input_time = -1 в php.ini

EDIT4: var_dump ($ _ POST) возвращает Array (0)

EDIT5: запуск последней стабильной версии PHP5 на debian squeeze: PHP 5.3.3-7 + squeeze8 с Suhosin-Patch (cli) (построено: 10 февраля 2012 14:12:26)

4b9b3361

Ответ 1

Вам нужно будет проверить параметры лимитов на всех элементах между вами и сервером. Достаточно сложно для прокси-серверов, если они есть, но, по крайней мере, вы можете проверить:

Apache:

  • LimitRequestBody, по умолчанию 2Gb, может быть, больше для 64 бит, проверьте журналы ошибок для деталей.

PHP:

  • post_max_size, который напрямую связан с размером POST
  • upload_max_filesize, который может быть несвязан, не уверен
  • max_input_time, если POSt занимает слишком много времени
  • max_input_nesting_level, если ваши данные представляют собой массив с множеством подуровней
  • max_execution_time, но совершенно уверен, что это не так.
  • memory_limit, так как вы можете достигнуть размера, выходящего за допустимую память подпроцесса
  • max_input_vars, если в вашем массиве данных много элементов

Если вы достигли скомпилированного лимита для Apache, ваше единственное решение - избежать прямого POSt такого большого количества данных, вам придется разбить его на части.

Ответ 2

Вы также можете проверить настройки suhosin.ini, например:

suhosin.post.max_value_length = 65000

Ответ 3

Вы также можете установить set_time_limit (0) и память предел.

РЕДАКТИРОВАТЬ: Вы можете также хотеть console.log(string); или console.log(string.length); перед тем, как ваш запрос будет проверен на правильность его установки, а также проверьте свой запрос в инструментах разработчика firebug или chromes, чтобы проверить отправку ваших данных.

Ответ 4

Просто разделите одиночные кавычки из имени параметра!

From:

data: {'data_string': string}

To:

data: {data_string: string}

Ответ 5

//Adding Respond Box After Selected Field
$( '[maxlength]' ).bind('click keyup', function(){
    var RespondBox = '<div class="StPgRp" id="UpdateRespond"></div>';
    $('#UpdateRespond').remove();
    $(this).after(RespondBox);
});

//Counting Maximum Characters Allowed In Selected Field
$( '[maxlength]' ).bind('click keyup', function(){
    var MaxLength = $(this).attr('maxlength');
    var CurrentLength = $(this).val().length;
    var Remainder = MaxLength - CurrentLength;
    $('#UpdateRespond').html('You have ' + Remainder + ' characters remaining.');
});

//Checking the PHP Function if YES then send message to user
$( '.Check' ).bind('click keyup', function(){
    var Check = $(this).parent().children('.Check').val();
});

Добавьте это в ваш .js файл, связанный с вашей страницей и отсортированным!