PHP max_input_vars


85

Ricevo un max_input_varsmessaggio di errore.

Capisco che ci sia php.iniun'impostazione che può cambiarla a partire dalla versione 5.3.9, tuttavia, sto eseguendo la versione 5.1.6.

Quando visualizzo le informazioni di configurazione per il mio server 5.1.6, il max_input_varsvalore è 1000.

La mia domanda è: anche se sto eseguendo 5.1.6, vedo questa impostazione da phpinfo()ma non è nel php.inifile. Ciò significa che il valore è hardcoded in questa versione di PHP e non può essere modificato?


2
Non vedo alcun riferimento max_input_varsnel codice sorgente di PHP 5.1.6, quindi non sono sicuro di come lo vedete nell'output di phpinfo (). Per quanto ne so, non esisteva prima del 5.3.9 ...
disegnato010 il

2
Molti parametri hanno impostazioni predefinite hardcoded, ma è comunque possibile assegnare un nuovo valore. Il fatto che qualcosa non sia impostato esplicitamente in php.ini non significa che non puoi usare php.ini per cambiarlo.
ottobre

Quale messaggio di errore ricevi? Per favore aggiungilo alla tua domanda.
hakre


Ho riscontrato questo errore dopo l'aggiornamento da 5.1.6 -> 5.3.3, quindi il downgrade a 5.1.6. Mi ha buttato perché quell'opzione non esiste nel 5.1.6 php.inifile. Ho aggiunto la riga, aumentato il numero e il mio errore / problema è scomparso.
JoshP

Risposte:


48

Puoi aggiungerlo a php.ini e dovrebbe funzionare: basta testarlo su PHP 5.3.6.


Grazie, vale la pena saperlo, anche se sono su 5.3.3 e non ho gioia.
Vaughany

grazie per questo ovvio puntatore, seriamente - stavo cercando questa impostazione per un'ora .... finché non l'ho vista, aggiungila fittizia!
jamesTheProgrammer

1
@Vaughany Nota che se sei nello stack bitnami, dovrai riavviare php-fpm nel caso in cui lo utilizzi. Il semplice riavvio di apache non aiuterà e potrebbe non essere nemmeno necessario dopo aver apportato una modifica a /opt/bitnami/php/etc/php.ini
Shrenik

101

Riferimento su PHP net:

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

Si noti che non è possibile impostare questa direttiva in fase di esecuzione con la funzione ini_set(name, newValue), ad es

ini_set('max_input_vars', 3000);

Non funzionerà.

Come spiegato nella documentazione, questa direttiva può essere impostata solo per ambito di directory, il che significa tramite file .htaccess, httpd.conf o .user.ini (a partire da PHP 5.3).

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

L'aggiunta della direttiva in php.ini o l'inserimento delle seguenti righe in .htaccess funzionerà:

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

3
Oppure inserire tutte e 3 le direttive suhosin su php.ini va bene.
Alain Tiemblo

1
Se hai accesso a php.ini, la sintassi della direttiva è max_input_vars = 3000(+ segno di uguale).
Parapluie

@ shorif2000 Ho avuto un problema simile in IIS, PHP 7 con wincache, utilizzando il file .user.ini. Il primo problema era la cache. Ho spostato le righe in ordine casuale, in .user.ini finché non ha funzionato. Secondo problema, cambiare da 1000 a 2000 non ha avuto alcun effetto, ma quando ho spostato l'intera riga su una riga diversa, ha funzionato.
Ryan Briscall

20

Ho appena tentato questa correzione con 5.3.3 e non ci sono modifiche. Cercando su Google ho trovato questa pagina web http://anothersysadmin.wordpress.com/2012/02/16/php-5-3-max_input_vars-and-big-forms/ che descrive in dettaglio altre impostazioni che devono essere modificate se il tuo server utilizza la patch Suhosin cosa che fa Apache sotto Debian.

Il sito spiega:

Quindi, se vuoi aumentare questo numero a, diciamo, 3000 dal numero predefinito che è 1000, devi inserire nel tuo php.ini queste righe:

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

L'ho testato (ho aggiunto le impostazioni a php.ini sia in / etc / php5 / apache2 che / etc / php5 / cli e ho riavviato Apache con successo) ma ancora nessuna variabile max_input_vars in phpinfo.

Alcuni siti indicano PHP 5.3.9 come la prima versione di PHP in cui questa modifica avrà luogo, quindi è colpa mia per non RTM correttamente in primo luogo, anche se sono interessato a vedere persone che lo segnalano funzionare nella versione successiva 5.3.3 ma inferiore a 5.3.9.


9

È necessario decommentare il valore max_input_vars nel file php.ini e aumentarlo (es. 2000), inoltre non dimenticare di riavviare il server, questo aiuterà per il 99,99%.


Questo non ha funzionato per me su Ubuntu 12.04. Impostalo su 3000 e usato sudo service apache2 restart. Devo riavviare Ubuntu?
motorbaby

@motorbaby, se hai commentato questo valore in php.ini, hai solo decommentato e riavviato i servizi. Il riavvio del sistema operativo non è necessario, ma potrebbe essere fatto, ma non vedo alcun senso in questo. Se non l'avevi, usa la soluzione @ lubosdz. Se entrambi non aiutano, controlla se stai apportando modifiche nel posto giusto, ad esempio in qualche modo hai diversi file php.ini. Puoi anche provare a
usare

La linea era lì. Ho rimosso ;e modificato il valore in 3000. Il problema era probabilmente la cache del browser. PHPMyAdmin chiuso e aperto in una nuova scheda e ora funziona. Grazie!
motorbaby

7

È il 2018 adesso. E mi sono bloccato su questo problema quando devo inviare una richiesta che supera il max_input_vars. E ho trovato una soluzione che newie come me ha dimenticato di riavviare il servizio php fpm dopo aver cambiato il max_input_varsparametro. perché ho solo provato a riavviare il apache2servizio, ma non php fpm

  1. decommenta il codice in /etc/php/7.0/fpm/php.inie imposta il numero come desideri
    max_input_vars = 4000
  2. riavviare il servizio php fpm, poiché utilizzo php 7. Pertanto,
    sudo service php7.0-fpm restart

Spero che aiuti
Testato su Debian Stretch,php7.0


Ho sprecato un'intera giornata cercando di capire come assicurarmi che le modifiche fossero applicate e leggere così tante soluzioni. Tutti hanno menzionato dopo aver apportato modifiche a php.ini che dovresti riavviare apache, il che non ha fatto la differenza. Il riavvio di php7.2-fpm come indicato in questa soluzione ha risolto il problema!
nightrain

3

L'uso di questa direttiva mitiga la possibilità di attacchi denial of service che utilizzano collisioni di hash. Se sono presenti più variabili di input di quelle specificate da questa direttiva, viene emesso un E_WARNING e ulteriori variabili di input vengono troncate dalla richiesta.

Posso suggerire di non estendere il valore predefinito che è 1000 ed estendere la funzionalità dell'applicazione serializzando la richiesta o inviare la richiesta per blocchi. Altrimenti, puoi estenderlo alla configurazione necessaria.

Deve sicuramente essere configurato nel php.ini


3

Nota che devi metterlo nel file ".user.ini" in Centos7 piuttosto che in "php.ini" che funzionava in Centos6. Puoi mettere ".user.ini" in qualsiasi sottodirectory per influenzare solo quella directory.

.user.ini:

max_input_vars = 3000

Testato su Centos7 e PHP 5.6.33.


2

php_value max_input_vars 6000

"Metti questa riga nel file .htaccess del tuo sito."


0

I nuovi Cpanels bloccano per vedere il file .htaccess o se aggiungi un .user.ini non sarai in grado di vederlo. ma con un piccolo trucco puoi farlo funzionare. Modifica ad esempio wp-config.php e nella barra degli URL sostituisci wp-config.php con .htaccess ora puoi incollare i valori e salvarli. inserisci qui la descrizione dell'immagine


0

Ho appena avuto lo stesso problema aggiungendo voci di menu a Wordpress. Sto usando Wordpress 4.9.9 su Ubuntu 18.04, PHP 7.0. Ho semplicemente decommentato la riga seguente e l'ho aumentata a 1500 in/etc/php/7.0/apache2/php.ini

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

Quindi ha utilizzato quanto segue per effettuare la modifica:

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

Spero possa aiutare.


0

"Messaggio PHP: Avviso PHP: Sconosciuto: le variabili di input hanno superato 1000. Per aumentare il limite, modificare max_input_vars in php.ini.

Questo parametro di configurazione php max_input_vars influenzerà non solo i parametri GET / POST / COOKIES, ma controlla anche qualsiasi input del modulo.

Per impostare o modificare il suo valore seguire i passaggi seguenti.

1) controlla l'impostazione / valore esistente visualizzandolo nel tuo file php.ini Individua il file php.ini usando

<?php echo getinfo(); ?>

trova sotto la chiave: File di configurazione caricato: /etc/php/5.6/fpm/php.ini

2) Apri il file php.ini in modalità modificabile e cerca max_input_vars Questa riga può essere commentata nella tua impostazione predefinita esistente con il valore predefinito di 1000, quindi rimuovi; per decommentarlo e modificarlo con il valore adatto, ad esempio 2500.

3) Salvare il file e riavviare i servizi di PHP utilizzando di seguito sudo service php5.6-fpm restart

Allo stesso modo puoi aggiornare qualsiasi altra configurazione PHP simile a tuo piacimento.


0

Solo per completare. Su un server condiviso usando mod_suphp stavo avendo lo stesso problema.

Dichiarare 4 max_input_vars (suhosin incluso), non l'ha risolto, ha continuato a troncare su 1000 vars (predefinito) e dichiarare "php_value max_input_vars 6000" su .htaccess ha generato l'errore 500.

Ciò che ha risolto è stato aggiungere quanto segue su .htaccess, che applica il file php.ini in modo ricorsivo a quel percorso

suPHP_ConfigPath /home/myuser/public_html

-6

Sì, aggiungilo a php.ini, riavvia apache e dovrebbe funzionare.

Puoi testarlo al volo se lo desideri ini_set("max_input_vars",100)


8
Questo non funzionerà, vedere php.net/manual/en/info.configuration.php . Deve essere impostato per host virtuale della directory o htaccess, non ini_set.
lubosdz

Possiamo impostare questa variabile tramite la funzione ini_set. Perché questa risposta ha perso voti? php.net/manual/en/info.configuration.php
Ahmad
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.