Intereting Posts
php утверждает, что моя определенная переменная не определена Перенаправление URL с динамическим сегментом URI в cpanel Isset vs array_key_exists Интерфейс с запущенными приложениями в PHP? Загрузка файла Jquery всегда завершается неудачей, когда загрузка файла отменена Вытяните все изображения из указанного каталога, а затем отобразите их Ошибка анализа: синтаксическая ошибка, неожиданный «endif» (T_ENDIF) в теме WordPress Twitter Распечатать неправильное имя экрана Laravel include вызывает ошибку: метод Illuminate \ View \ View :: __ toString () не должен вызывать исключение Установка pdo_mysql на Amazon EC2 с PHP 5.5 Получение текстовой части узла с использованием php Simple XML Как написать файл журнала ошибок в PHP Ошибка PHP: вызов функции-члена rowCount () для объекта без объекта TransformationFailedException после обновления PHP 5.6.26 до 5.6.27 Функция gzopen не существует после того, как я изменил настройку PHP

Предупреждение: входные переменные превысили 1000

Я строю RESTS, как сервис на PHP, который должен принять большую должность JSON в качестве основных данных (я отправляю и читаю данные, как описано здесь: http://forums.laravel.io/viewtopic.php?id=900 )

Проблема в том, что PHP дает мне следующее предупреждение:

<b>Warning</b>: Unknown: Input variables exceeded 1000. To increase the limit change max_input_vars in php.ini. in <b>Unknown</b> on line <b>0</b><br /> 

Есть ли способ, чтобы PHP не учитывал входные переменные (или я должен просто отжимать предупреждения запуска)?

Что-то не так, вам не нужны 1000 переменных. Перекодируйте свою программу, чтобы принять 1 массив переменных с 1000 ключами. Это ошибка, чтобы предупредить вас, что вы не делаете то, что рекомендуется. Не отключайте его, не расширяйте или не скройте.

Я выяснил, что правильный способ обработки json-данных непосредственно на PHP (через file_get_contents('php://input') ) состоит в том, чтобы убедиться, что запрос устанавливает правильный контент-тип, т.е. Content-type: application/json в HTTP заголовок запроса.

В моем случае я запрашиваю страницы с php, используя curl для этого кода:

 function curl_post($url, array $post = NULL, array $options = array()) { $defaults = array( CURLOPT_POST => 1, CURLOPT_HEADER => 0, CURLOPT_URL => $url, CURLOPT_FRESH_CONNECT => 1, CURLOPT_RETURNTRANSFER => 1, CURLOPT_FORBID_REUSE => 1, CURLOPT_TIMEOUT => 600 ); if(!is_null($post)) $defaults['CURLOPT_POSTFIELDS'] = http_build_query($post); $ch = curl_init(); curl_setopt_array($ch, ($options + $defaults)); if(($result = curl_exec($ch)) === false) { throw new Exception(curl_error($ch) . "\n $url"); } if(curl_getinfo($ch, CURLINFO_HTTP_CODE) != 200) { throw new Exception("Curl error: ". curl_getinfo($ch, CURLINFO_HTTP_CODE) ."\n".$result . "\n"); } curl_close($ch); return $result; } $curl_result = curl_post(URL, NULL, array(CURLOPT_HTTPHEADER => array('Content-Type: application/json'), CURLOPT_POSTFIELDS => json_encode($out)) ); 

Обратите внимание на CURLOPT_HTTPHEADER => array('Content-Type: application/json') .

На принимающей стороне я использую следующий код:

 $rawData = file_get_contents('php://input'); $postedJson = json_decode($rawData,true); if(json_last_error() != JSON_ERROR_NONE) { error_log('Last JSON error: '. json_last_error(). json_last_error_msg() . PHP_EOL. PHP_EOL,0); } 

Не изменяйте переменную max_input_vars . После изменения запроса на установку правильных заголовков моя проблема с max_input_vars исчезла. По-видимому, PHP не оценивает пост-переменные с определенным Content-type .

Реально, измените max_input_vars используя файл .htaccess но вам нужно перезапустить службу Apache.

Следуйте за полным процессом:

  1. Перейдите в C:\xampp\apache\conf\httpd.conf
  2. Откройте файл httpd.conf
  3. В файле найдите xampp/htdocs
  4. Немного ниже, вы можете увидеть такую ​​строку: AllowOverride
  5. Если эта строка показывает # до AllowOverride удалите #
  6. Следующая строка после AllowOverride вставить php_value max_input_vars 10000
  7. Сохраните файл и закройте
  8. Наконец STOP Apache и Restart (он будет работать сразу после перезапуска apache)

Согласно php manual max_input_vars в роли php.ini :

Сколько входных переменных может быть принято (предел применяется к $_GET , $_POST и $_COOKIE отдельно). Использование этой директивы смягчает возможность атак на отказ в обслуживании, которые используют хеш-коллизии. Если имеется больше входных переменных, чем указано в этой директиве, E_WARNING , а дополнительные входные переменные усекаются из запроса. Этот предел применяется только к каждому уровню вложенности многомерного входного массива.

Вам просто нужно присвоить большее число max_input_vars в php.ini .

Изменение max_input_vars в php.ini не сработало для меня

Измените max_input_vars, используя файл .htaccess.

Если вы хотите изменить «max_input_vars», используя файл .htaccess, перейдите в файл C: \ xampp \ apache \ conf \ httpd.conf (в xampp), добавьте следующий код в файл .htaccess.

php_value max_input_vars 10000