Пропущенные массивы теряют все, кроме первого элемента

У меня странная проблема. Недавно я перенес свое приложение с моей локальной установки xampp на SUSE Enterprise Server 11, и все работает, но эта одна вещь сводит меня с ума, и я не могу найти решение.

При передаче массивов через GET или POST с использованием этого синтаксиса:

search_dggs.php?latmin[]=52.447529&latmin[]=22&lonmin=17.56&lonmax=22.16 

Я получаю только первый элемент latmin. Имейте в виду, что это всего лишь простой пример, который я пробовал после того, как произошла ошибка в других местах, где необходима передача массивов.

 print_r($_SERVER["QUERY_STRING"]); 

выходы

 latmin[]=52.447529&latmin[]=22&lonmin=17.56&lonmax=22.16 

но

 print_r($_GET); 

дает

 Array ( [latmin] => Array ( [0] => 52.447529 ) [lonmin] => 17.56 [lonmax] => 22.16 ) 

Точно так же происходит со всеми запросами POST.

Я использую PHP версии 5.3.8. Я думаю, проблема в некоторой конфигурации сервера, но я ничего не мог найти об этой проблеме.

Ответ на комментарии:

То же самое происходит, если я подаю любое количество переменных.

 parse_str($_SERVER["QUERY_STRING"]); print_r($latmin); 

дает

 Array ( [0] => 52.447529 ) 

php.ini можно найти здесь

Вы должны увидеть поведение в действии здесь

Исходный файл этого php-файла

 <?php $test="latmin[]=52.447529&latmin[]=22&lonmin=23&lonmax=22.16"; parse_str($test); print_r($latmin); phpinfo(); ?> 

Ну, мой системный администратор сделал системное обновление и перезагрузился, и проблема теперь исправлена. Никакие файлы конфигурации не были изменены.

Протестировано на моем сервере, и это отлично работает для меня:

 _GET["latmin"] Array ( [0] => 52.447529 [1] => 22 ) 

Посмотрите в своем php.ini в разделе «Обработка данных» и посмотрите, что это за значения. Сбросьте все по умолчанию, перезапустите веб-сервер и повторите попытку. Обработка данных по умолчанию для PHP.ini

Пример на ссылке печатает Array ( [0] => 52.447529 ) каждый раз, даже если никакие переменные не были переданы. Итак, кажется, что у вас есть проблема в коде, который не связан с этим кодом: `

 $test="latmin[]=52.447529&latmin[]=22&lonmin=23&lonmax=22.16"; parse_str($test); print_r($latmin); phpinfo(); 

`

Хм .. может быть, это как-то связано с этой критической уязвимостью ? У вашей XAMPP есть такая же версия PHP, как и производство? Я знаю, что могут возникнуть подобные проблемы, если вы публикуете слишком много данных (как с точки зрения размера файла / сообщения, так и количества пара). Как насчет обновления до 5.3.10?

Попробуйте $_REQUEST вместо $_GET и / или $_POST

Наиболее вероятной причиной этой ошибки является то, что кто-то установил «max_input_vars» в 0 или 1 в php.ini. «max_input_vars» по умолчанию имеет значение 1000 и может быть переопределено в php.ini.

В последнее время я столкнулся с тем же поведением с другой причиной – исправление безопасности, которое кто-то обратил к установке PHP 5.2, частично реализованной «max_input_vars», но пропустил некоторые важные биты. Разная причина, тот же результат.

Соответствующий исходный код php можно найти в main / php_variables.c. В php 5.3.8 каучук попадал в дорогу в функции php_register_variable_ex.

Существует крючок SAPI «treat_data», который использует php при синтаксическом анализе строк, таких как «foo = bar & asdf [] = 1 & asdf [] = 2». У другого SAPI может быть собственная реализация этого.