PHP Данные не полностью отправляются на сервер
Имеется форма, которая может содержать много данных, вида:
<form>
<div>
<input type="hidden" name="item[n][id]" value="">
<input type="hidden" name="item[n][datestamp]" value="">
<input type="hidden" name="item[n][visible_slot]" value="">
<input type="text" name="item[n][title]" value="">
<input type="text" name="item[n][price]" value=""></div>
<input type="text" name="item[n][sizes]" value=""></div>
<textarea name="item[n][description]"></textarea>
<div>
<div>
<input type="hidden" name="item[n][visible_img][k]" value="">
<input type="hidden" name="item[n][photo][k]" value="">
</div>
... k+1 < 10
</div>
</div>
... n+1
</form>
Пример данных
$_POST['item'][262] => Array
(
[id] => 71424
[datestamp] => 1610099549
[visible_slot] => true
[title] => ...
[price] => ...
[sizes] => ...
[description] => ...
[visible_img] => Array
(
[0] => true
[1] => true
[2] => true
[3] => false
[4] => true
)
[photo] => Array
(
[0] => https://sun9-8.userapi.com/impf/Q13JyX8Q...um
[1] => https://sun9-70.userapi.com/impf/rTli...pe=album
[2] => https://sun9-36.userapi.com/impf/jJ...=album
[3] => https://sun9-7.userapi.com/impf/r...type=album
)
)
Значений может быть больше чем 262 (это последние полученное значение), с меньшим количеством все отправлялось целиком.
С менял (в .htaccess и в php.ini) post_max_size результата не дало. Форма отправляется submitом. Что еще может ограничивать передачу и с чем может быть связанно?
P.S. Ошибок на стороне клиента нет, на сервере просто дампил в файл
Ответы (1 шт):
Максимальное число принимаемых сервером переменных регулируется параметром max_input_vars конфигурации php.ini.
Сколько входных переменных может быть принято в одном запросе (ограничение накладывается на каждую из глобальных переменных $_GET, $_POST и $_COOKIE отдельно). Использование этой директивы снижает вероятность сбоев в случае атак с использованием хеш-коллизий. Если входных переменных больше, чем задано директивой, выбрасывается предупреждение E_WARNING, а все последующие переменные в запросе игнорируются.
© https://www.php.net/manual/ru/info.configuration.php
каждое поле вашего массива - отдельная переменная запроса. Так что при превышении установленного числа все остальное вы теряете.
В случае, если производите редактирование некой таблицы, и отправляете все изменения на сервер "пачкой", то лучше измените логику на использование аякса и сохранения по-одной строке за раз.