2012-02-29 10 views
20

Ho una forma grande e posso vedere da Firebug che tutti i valori degli elementi vengono inviati correttamente, ma quando stampo_r ($ _ POST) ci sono solo 1000 variabili visualizzate. Il mio max_post_size è impostato su 25M, quindi so che non è il problema e ho cercato attraverso il mio php.ini per parole chiave come "post" e "max" e non ho trovato nulla.php Post limitato a 1000 variabili

1000 è solo circa 1/4 degli elementi che sto passando, quindi ovviamente questo è un grosso problema per me, ho davvero apprezzato ogni aiuto che posso ottenere.

+13

Solo 1000 variabili? –

+0

* (bocche) * MILLE? – MacMac

+2

Questa probabilmente è una limitazione del protocollo HTTP (sebbene non ne abbia mai sentito parlare). C'è un modo per minimizzare il numero di variabili inviate nel tuo POST? Non ho mai sentito di un sito che ha oltre 9000 variabili (dovute dire) POST. –

risposta

34

Vedo cosa hai fatto qui.

max_input_vars, 1000 

introdotta al fine di evitare che hash attacco di collisione: http://www.phpclasses.org/blog/post/171-PHP-Vulnerability-May-Halt-Millions-of-Servers.html ma non è riuscito a 5.3.9: http://www.phpclasses.org/blog/post/175-Another-Serious-Security-Bug-on-PHP-539.html Quindi è necessario aggiornare a 5.3.10+ se questo è un problema.

+2

Potrebbe anche essere 'suhosin.post.max_vars = 1000' (se sta usando Suhosin, ovviamente). – Crontab

+0

@Crontab, potrebbe essere, hai ragione, ma tutte le società di hosting dovrebbero essere aggiornate alla 5.3.10+ :) –

+0

L'ho visto sulle impostazioni max_input_vars e suhosin.post.max_vars ma nessuno dei due è nel mio php.ini. Ho 5.3.6 installato. – jreed121

6

Ho avuto una situazione simile; Potevo solo POST i primi 1000 elementi di un array.

La mia soluzione era di implode() l'array in una stringa lunga e explode() sul lato server.

json_encode() potrebbe anche funzionare.

7

Ho avuto lo stesso identico problema del limite di 1000 variabili utilizzando PHP v5.4.20. Anche se il file php.ini non conteneva nessuna riga "max_input_vars", ho semplicemente trovato un posto comodo per inserirlo nella parte superiore [PHP], aggiunto la riga 'max_input_vars = 10000', riavviato Apache e tutto è stato risolto .

0

Ok. Ho capito una soluzione che utilizza jQuery

ho fatto in questo modo la funzione

$("#single-form").submit(function(event) { 
    event.preventDefault(); 
    var table_data = $(this).serialize(); 
    console.log(table_data); 
    // ajax call to handle the data 
} 

serialize darà l'URL stringhe codificate di tutti i dati di un modulo e in file PHP basta utilizzare la funzione parse_str per analizzare la stringa in variabili.