PHP max_input_vars

85

Otrzymuję max_input_varskomunikat o błędzie.

Rozumiem, że istnieje php.iniustawienie, które może to zmienić, począwszy od wersji 5.3.9, jednak używam wersji 5.1.6.

Kiedy przeglądam informacje o konfiguracji mojego serwera 5.1.6, pokazuje, że max_input_varswartość wynosi 1000.

Moje pytanie brzmi: mimo że używam wersji 5.1.6, widzę to ustawienie od, phpinfo()ale nie ma go w php.inipliku. Czy to oznacza, że ​​wartość jest zakodowana na stałe w tej wersji PHP i nie można jej zmienić?

user39653
źródło
2
Nie widzę żadnego odniesienia do max_input_varsw kodzie źródłowym PHP 5.1.6, więc nie jestem pewien, jak widzisz to na wyjściu phpinfo (). O ile wiem, nie istniało przed 5.3.9 ...
drew010
2
Wiele parametrów ma wartości domyślne, które są zakodowane na stałe, ale nadal można przypisać nową wartość. Fakt, że coś nie jest wyraźnie ustawione w php.ini, nie oznacza, że ​​nie możesz użyć php.ini, aby to zmienić.
octern
Który komunikat o błędzie otrzymujesz? Dodaj to do swojego pytania.
hakre
Wystąpił ten błąd po uaktualnieniu z 5.1.6 -> 5.3.3, a następnie powrocie do 5.1.6. Wyrzuciłem mnie, ponieważ ta opcja nie istnieje w 5.1.6 php.inipliku. Dodałem linię, podniosłem numer i mój błąd / problem zniknął.
JoshP

Odpowiedzi:

48

Możesz dodać go do php.ini i powinno działać - właśnie przetestowałem go na PHP 5.3.6.

Narf
źródło
Dzięki, warto wiedzieć, chociaż jestem na 5.3.3 i nie ma radości.
Vaughany,
dzięki za ten oczywisty wskaźnik, serio - szukałem tego ustawienia przez godzinę .... dopóki tego nie zobaczyłem, dodaj to manekin!
jamesTheProgrammer
1
@Vaughany Zwróć uwagę, że jeśli jesteś na stosie bitnami, będziesz musiał ponownie uruchomić php-fpm na wypadek, gdybyś go używał. Po prostu ponowne uruchomienie Apache nie pomoże i może nawet nie być wymagane po wprowadzeniu zmiany w /opt/bitnami/php/etc/php.ini
Shrenik
101

Odniesienie do sieci PHP:

http://php.net/manual/en/info.configuration.php#ini.max-input-vars

Należy pamiętać, że nie można ustawić tej dyrektywy w czasie wykonywania za pomocą funkcji ini_set(name, newValue), np

ini_set('max_input_vars', 3000);

To nie zadziała.

Jak wyjaśniono w dokumentacji, ta dyrektywa może być ustawiona tylko dla zakresu katalogu, co oznacza poprzez plik .htaccess, httpd.conf lub .user.ini (od PHP 5.3).

Zobacz http://php.net/manual/en/configuration.changes.modes.php

Dodanie dyrektywy do php.ini lub umieszczenie następujących linii w .htaccess zadziała:

php_value max_input_vars 3000
php_value suhosin.get.max_vars 3000
php_value suhosin.post.max_vars 3000
php_value suhosin.request.max_vars 3000
lubosdz
źródło
3
Lub umieszczenie wszystkich 3 dyrektyw suhosin na php.ini jest w porządku.
Alain Tiemblo,
1
Jeśli masz dostęp do php.ini, składnia dyrektywy to max_input_vars = 3000(+ znak równości).
Parapluie
@ shorif2000 Miałem podobny problem w IIS, PHP 7 w / wincache, używając pliku .user.ini. Pierwszym problemem była pamięć podręczna. Przesuwałem wiersze w losowej kolejności w .user.ini, aż w końcu zadziałało. Drugi problem, zmiana 1000 na 2000 nie przyniosła skutku, ale kiedy przeniosłem całą linię na inną linię, to zadziałało.
Ryan Briscall
20

Właśnie wypróbowałem tę poprawkę w wersji 5.3.3 i nic się nie zmieniło. Szukając w Google, znalazłem tę stronę internetową http://anothersysadmin.wordpress.com/2012/02/16/php-5-3-max_input_vars-and-big-forms/ ze szczegółami innych ustawień, które wymagają zmiany, jeśli twój serwer używa poprawki Suhosin co robi Apache pod Debianem.

Witryna wyjaśnia:

Tak więc, jeśli chcesz zwiększyć tę liczbę do, powiedzmy, 3000 z domyślnej liczby, która wynosi 1000, musisz umieścić w swoim php.ini następujące linie:

max_input_vars = 3000 suhosin.post.max_vars = 3000 suhosin.request.max_vars = 3000

Przetestowałem to (dodałem ustawienia do php.ini zarówno w / etc / php5 / apache2 i / etc / php5 / cli i pomyślnie zrestartowałem Apache), ale nadal nie ma zmiennej max_input_vars w phpinfo.

Kilka witryn wskazuje na PHP 5.3.9 jako pierwszą wersję PHP, w której ta zmiana zostanie wprowadzona, więc moja wina, że ​​RTM nie działa poprawnie, chociaż interesuje mnie, jak ludzie zgłaszają, że działa w wersji powyżej 5.3.3 ale poniżej 5.3.9.

Vaughany
źródło
9

Musisz odkomentować wartość max_input_vars w pliku php.ini i zwiększyć ją (exp. 2000), również nie zapomnij zrestartować serwera, to pomoże na 99,99%.

Oleg Sapishchuk
źródło
To nie zadziałało dla mnie na Ubuntu 12.04. Ustaw na 3000 i używaj sudo service apache2 restart. Czy muszę ponownie uruchomić Ubuntu?
motorbaby
@motorbaby, Jeśli ta wartość została skomentowana w php.ini, to wystarczyło odkomentować i ponownie uruchomić usługi. Restart OS nie jest potrzebny, ale można to zrobić, ale nie widzę w tym żadnego sensu. Jeśli go nie masz, użyj rozwiązania @ lubosdz. Jeśli oba nie pomogą, sprawdź, czy robisz zmiany we właściwym miejscu, na przykład jakoś masz kilka plików php.ini. Możesz także spróbować po prostu użyć "sudo service apache2 reload" do przeładowania konfiguracji
Oleg Sapishchuk
Linia była tam. Usunąłem ;i zmieniłem wartość na 3000. Problem prawdopodobnie dotyczył pamięci podręcznej przeglądarki. Zamknięte PHPMyAdmin i otwarte w nowej karcie i teraz działa. Dzięki!
motorbaby
6

Teraz jest 2018 rok i właśnie utknąłem w tym problemie, kiedy muszę wysłać żądanie, które przekracza max_input_vars. I wymyśliłem rozwiązanie, w którym nowicjusz jak ja zapomniał zrestartować usługę php fpm po zmianie max_input_varsparametru. ponieważ próbowałem tylko zrestartować apache2usługę, ale nie php fpm

  1. odkomentuj kod na /etc/php/7.0/fpm/php.inii ustaw numer, jak chcesz
    max_input_vars = 4000
  2. zrestartuj usługę php fpm, ponieważ używam php 7. Dlatego
    sudo service php7.0-fpm restart

Nadzieję, że pomoże
Testowane na Debian Stretch,php7.0

nokieng
źródło
Zmarnowałem cały dzień, próbując dowiedzieć się, jak upewnić się, że zmiany zostały zastosowane i przeczytać tak wiele rozwiązań. Wszyscy wspominali, że po wprowadzeniu zmian w php.ini należy ponownie uruchomić Apache, co nie robi różnicy. Ponowne uruchomienie php7.2-fpm zgodnie z tym rozwiązaniem rozwiązało problem!
pociąg nocny
3

Korzystanie z tej dyrektywy ogranicza możliwość ataków typu „odmowa usługi”, które wykorzystują kolizje skrótów. Jeśli jest więcej zmiennych wejściowych niż określono w tej dyrektywie, generowany jest E_WARNING, a dalsze zmienne wejściowe są obcinane z żądania.

Mogę zasugerować, aby nie rozszerzać domyślnej wartości, która wynosi 1000 i rozszerzać funkcjonalność aplikacji poprzez serializację żądania lub wysyłanie żądania blokami. W przeciwnym razie możesz rozszerzyć to na wymaganą konfigurację.

Zdecydowanie musi być skonfigurowany w php.ini

Luis Farfan
źródło
3

Zauważ, że musisz umieścić to w pliku „.user.ini” w Centos7, a nie w „php.ini”, który działał w Centos6. Możesz umieścić plik „.user.ini” w dowolnym podkatalogu, aby wpłynąć tylko na ten katalog.

.user.ini:

max_input_vars = 3000

Testowane na Centos7 i PHP 5.6.33.

Gary Samad
źródło
2

php_value max_input_vars 6000

„Umieść tę linię w pliku .htaccess swojej witryny”.

Rahul KA
źródło
0

Nowy blok Cpanels, aby zobaczyć plik .htaccess lub jeśli dodasz .user.ini, nie będziesz w stanie go zobaczyć. ale przy odrobinie hackowania możesz sprawić, że to zadziała. Edytuj na przykład wp-config.php i zamień wp-config.php na .htaccess na pasku adresu. Teraz możesz wkleić wartości i zapisać je. wprowadź opis obrazu tutaj

Sebastian Heye
źródło
0

Po prostu miałem ten sam problem z dodawaniem pozycji menu do Wordpressa. Używam Wordpress 4.9.9 na Ubuntu 18.04, PHP 7.0. Po prostu odkomentowałem następujący wiersz i zwiększyłem go do 1500 cali/etc/php/7.0/apache2/php.ini

; How many GET/POST/COOKIE input variables may be accepted<br>
max_input_vars = 1500

Następnie zastosował następujące zmiany, aby wprowadzić zmianę:

sudo apache2ctl configtest  #(if it does not return ok Apache will not start)
sudo service apache2 reload

Mam nadzieję, że to pomoże.

MagicMartinian
źródło
0

"Wiadomość PHP: PHP Ostrzeżenie: Nieznane: Zmienne wejściowe przekroczyły 1000. Aby zwiększyć limit, zmień max_input_vars w php.ini.

Ten parametr konfiguracyjny php max_input_vars wpłynie nie tylko na parametry GET / POST / COOKIES, ale także kontroluje Twoje dane wejściowe.

Aby ustawić lub zmienić jego wartość, wykonaj poniższe czynności.

1) sprawdź istniejące ustawienie / wartość, przeglądając je w pliku php.ini Zlokalizuj plik php.ini za pomocą

<?php echo getinfo(); ?>

znajdź poniżej klucz: Załadowany plik konfiguracyjny: /etc/php/5.6/fpm/php.ini

2) Otwórz plik php.ini w trybie edytowalnym i wyszukaj max_input_vars. Ta linia może być skomentowana w twoim istniejącym domyślnym ustawieniu z domyślną wartością 1000, więc usuń; aby odkomentować go i edytować go odpowiednią wartością, np. 2500.

3) Zapisz plik i uruchom ponownie usługi PHP, korzystając z poniższego sudo service php5.6-fpm restart

Podobnie możesz zaktualizować każdą inną podobną konfigurację PHP, aby ułatwić sobie pracę.

Patel Nikhil
źródło
0

Tylko jako uzupełnienie. Na współdzielonym serwerze korzystającym z mod_suphp miałem ten sam problem.

Zadeklarowanie 4 max_input_vars (w tym suhosin), nie rozwiązało tego, po prostu obcinało na 1000 zmiennych (domyślnie) i zadeklarowanie „php_value max_input_vars 6000” na .htaccess spowodowało błąd 500.

Rozwiązaniem było dodanie następującego elementu na .htaccess, co powoduje rekursywne zastosowanie pliku php.ini do tej ścieżki

suPHP_ConfigPath /home/myuser/public_html
Daniel
źródło
-6

Tak, dodaj go do php.ini, zrestartuj apache i powinno działać.

Możesz go przetestować w locie, jeśli chcesz ini_set("max_input_vars",100)

Quaid
źródło
8
To nie zadziała, zobacz php.net/manual/en/info.configuration.php . Musi być ustawione dla wirtualnego hosta katalogu lub htaccess, a nie ini_set.
lubosdz
Możemy ustawić tę zmienną poprzez funkcję ini_set. Dlaczego ta odpowiedź przyniosła spadek głosów? php.net/manual/en/info.configuration.php
Ahmad