PHP max_input_vars

83

Ich erhalte eine max_input_varsFehlermeldung.

Ich verstehe, dass es eine php.iniEinstellung gibt, die dies ab Version 5.3.9 ändern kann. Ich verwende jedoch Version 5.1.6.

Wenn ich die Konfigurationsinformationen für meinen 5.1.6-Server ansehe, wird der max_input_varsWert 1000 angezeigt .

Meine Frage ist: Obwohl ich 5.1.6 ausführe, sehe ich diese Einstellung von, phpinfo()aber sie ist nicht in der php.iniDatei. Bedeutet dies, dass der Wert in dieser Version von PHP fest codiert ist und nicht geändert werden kann?

user39653
quelle
2
Ich sehe max_input_varsim PHP 5.1.6-Quellcode überhaupt keinen Verweis darauf, daher bin ich mir nicht sicher, wie Sie ihn in der Ausgabe von phpinfo () sehen. Soweit ich weiß, existierte es nicht vor 5.3.9 ...
draw010
2
Viele Parameter haben Standardeinstellungen, die fest codiert sind, aber Sie können trotzdem einen neuen Wert zuweisen. Die Tatsache, dass etwas nicht explizit in php.ini festgelegt ist, bedeutet nicht, dass Sie php.ini nicht verwenden können, um es zu ändern.
Oktober
Welche Fehlermeldung erhalten Sie? Bitte fügen Sie es Ihrer Frage hinzu.
hakre
Nach dem Upgrade von 5.1.6 -> 5.3.3und dann wieder auf diesen Fehler bin ich auf diesen Fehler gestoßen 5.1.6. Warf mich, weil diese Option in der 5.1.6 php.iniDatei nicht vorhanden ist . Ich fügte die Zeile hinzu, erhöhte die Nummer und mein Fehler / Problem ging weg.
JoshP

Antworten:

46

Sie können es zu php.ini hinzufügen und es sollte funktionieren - testen Sie es einfach auf PHP 5.3.6.

Narf
quelle
Danke, das ist wissenswert, obwohl ich auf 5.3.3 bin und keine Freude habe.
Vaughany
Vielen Dank für diesen offensichtlichen Hinweis, im Ernst - ich habe eine Stunde lang nach dieser Einstellung gesucht ... bis ich das gesehen habe, füge sie Dummy hinzu!
JamesTheProgrammer
1
@ Vaughany Beachten Sie, dass Sie, wenn Sie sich auf dem Bitnami-Stack befinden, die PHP-Fpm neu starten müssen, falls Sie sie verwenden. Ein einfacher Neustart von Apache hilft nicht und ist möglicherweise nicht einmal erforderlich, nachdem eine Änderung an /opt/bitnami/php/etc/php.ini
Shrenik
101

Referenz auf PHP net:

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

Bitte beachten Sie, dass Sie diese Direktive nicht zur Laufzeit mit Funktion setzen können ini_set(name, newValue), z

ini_set('max_input_vars', 3000);

Es wird nicht funktionieren.

Wie in der Dokumentation erläutert, kann diese Anweisung nur pro Verzeichnisbereich festgelegt werden, dh über die .htaccess-Datei, httpd.conf oder .user.ini (seit PHP 5.3).

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

Das Hinzufügen der Direktive in php.ini oder das Einfügen der folgenden Zeilen in .htaccess funktioniert:

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
quelle
3
Oder alle 3 Suhosin-Direktiven auf php.ini zu platzieren ist in Ordnung.
Alain Tiemblo
1
Wenn Sie Zugriff auf php.ini haben, lautet die Direktivensyntax max_input_vars = 3000(+ Gleichheitszeichen).
Parapluie
@ shorif2000 Ich hatte ein ähnliches Problem in IIS, PHP 7 mit wincache, unter Verwendung der Datei .user.ini. Das erste Problem war der Cache. Ich habe die Zeilen in zufälliger Reihenfolge in .user.ini verschoben, bis es endlich funktioniert hat. Das zweite Problem, das Ändern von 1000 auf 2000, hatte keine Auswirkung, aber als ich die gesamte Zeile auf eine andere Zeile verschob, funktionierte es.
Ryan Briscall
20

Habe gerade dieses Update mit 5.3.3 versucht und es gibt keine Änderung. Beim Googeln habe ich diese Webseite http://anothersysadmin.wordpress.com/2012/02/16/php-5-3-max_input_vars-and-big-forms/ gefunden , auf der andere Einstellungen aufgeführt sind, die geändert werden müssen, wenn Ihr Server den Suhosin-Patch verwendet was Apache unter Debian tut.

Die Seite erklärt:

Wenn Sie also diese Zahl von der Standardzahl 1000 auf 3000 erhöhen möchten, müssen Sie in Ihre php.ini folgende Zeilen einfügen:

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

Ich habe es getestet (Einstellungen zu php.ini sowohl in / etc / php5 / apache2 als auch in / etc / php5 / cli hinzugefügt und Apache erfolgreich neu gestartet), aber immer noch keine Variable max_input_vars in phpinfo.

Einige Websites verweisen auf PHP 5.3.9 als die erste PHP-Version, in der diese Änderung vorgenommen wird. Daher ist es meine Schuld, dass RTM überhaupt nicht richtig funktioniert, obwohl ich daran interessiert bin, dass Leute berichten, dass es in Version 5.3.3 funktioniert aber unter 5.3.9.

Vaughany
quelle
9

Sie müssen den Wert max_input_vars in der Datei php.ini auskommentieren und erhöhen (exp. 2000). Vergessen Sie auch nicht, Ihren Server neu zu starten. Dies hilft 99,99%.

Oleg Sapishchuk
quelle
Dies hat bei Ubuntu 12.04 bei mir nicht funktioniert. Stellen Sie es auf 3000 und verwendet sudo service apache2 restart. Muss ich Ubuntu neu starten?
Motorbaby
@motorbaby, Wenn Sie diesen Wert in php.ini kommentiert hatten, hatten Sie nur Kommentar- und Neustartdienste. Ein Neustart des Betriebssystems ist nicht erforderlich, könnte aber durchgeführt werden, aber ich sehe darin keinen Sinn. Wenn Sie es nicht hatten, verwenden Sie die @ lubosdz-Lösung. Wenn beides nicht hilft, überprüfen Sie, ob Sie Änderungen an der richtigen Stelle vornehmen, z. B. haben Sie mehrere php.ini-Dateien. Sie können auch versuchen, nur "sudo service apache2 reload" zum Neuladen von Konfigurationen zu verwenden
Oleg Sapishchuk
Die Leitung war da. Ich habe ;den Wert entfernt und auf 3000 geändert. Das Problem war wahrscheinlich der Cache des Browsers. PHPMyAdmin geschlossen und in einem neuen Tab geöffnet und es funktioniert jetzt. Vielen Dank!
Motorbaby
5

Es ist jetzt 2018. Und ich bin gerade bei diesem Problem hängen geblieben, als ich eine Anfrage senden muss, die die überschreitet max_input_vars. Und ich habe eine Lösung gefunden, bei der ein Neuling wie ich vergessen hat, den PHP-Fpm-Dienst nach dem Ändern des max_input_varsParameters neu zu starten . weil ich nur versucht habe neu zu startenapache2 service , aber nicht php fpm

  1. Kommentar auskommentieren /etc/php/7.0/fpm/php.iniund Nummer nach Belieben einstellen
    max_input_vars = 4000
  2. Starten Sie den PHP-Fpm-Dienst neu, da ich PHP 7 verwende.
    sudo service php7.0-fpm restart

Hoffe es hilft
getestet auf Debian Stretch,php7.0

nokieng
quelle
Ich habe einen ganzen Tag damit verbracht, herauszufinden, wie ich sicherstellen kann, dass Änderungen angewendet werden, und so viele Lösungen gelesen. Sie alle erwähnten, dass Sie nach Änderungen an php.ini Apache neu starten sollten, was keinen Unterschied machte. Ein Neustart von php7.2-fpm wie in dieser Lösung angegeben löste das Problem!
Nightrain vor
3

Die Verwendung dieser Richtlinie verringert die Möglichkeit von Denial-of-Service-Angriffen, bei denen Hash-Kollisionen verwendet werden. Wenn mehr Eingabevariablen vorhanden sind als in dieser Anweisung angegeben, wird ein E_WARNING ausgegeben und weitere Eingabevariablen werden von der Anforderung abgeschnitten.

Ich kann vorschlagen, den Standardwert 1000 nicht zu erweitern und die Anwendungsfunktionalität zu erweitern, indem die Anforderung serialisiert oder die Anforderung blockweise gesendet wird. Andernfalls können Sie dies auf die erforderliche Konfiguration erweitern.

Es muss definitiv in der php.ini eingerichtet werden

Luis Farfan
quelle
3

Beachten Sie, dass Sie dies in die Datei ".user.ini" in Centos7 einfügen müssen und nicht in "php.ini", die früher in Centos6 funktioniert hat. Sie können ".user.ini" in ein beliebiges Unterverzeichnis einfügen, um nur dieses Verzeichnis zu beeinflussen.

.user.ini:

max_input_vars = 3000

Getestet auf Centos7 und PHP 5.6.33.

Gary Samad
quelle
2

php_value max_input_vars 6000

"Fügen Sie diese Zeile in die .htaccess-Datei Ihrer Site ein."

Rahul KA
quelle
0

Neuer Cpanels-Block, um die .htaccess-Datei anzuzeigen, oder wenn Sie eine .user.ini hinzufügen, wird sie nicht angezeigt. Aber mit einem kleinen Hack können Sie es zum Laufen bringen. Bearbeiten Sie zum Beispiel wp-config.php und ersetzen Sie in der URL-Leiste wp-config.php durch .htaccess. Jetzt können Sie die Werte einfügen und speichern. Geben Sie hier die Bildbeschreibung ein

Sebastian Heye
quelle
0

Hatte gerade das gleiche Problem beim Hinzufügen von Menüelementen zu Wordpress. Ich verwende Wordpress 4.9.9 unter Ubuntu 18.04, PHP 7.0. Ich habe die folgende Zeile einfach auskommentiert und auf 1500 Zoll erhöht/etc/php/7.0/apache2/php.ini

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

Verwenden Sie dann Folgendes, um die Änderung zu bewirken:

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

Hoffentlich hilft das.

MagicMartinian
quelle
0

"PHP-Nachricht: PHP Warnung: Unbekannt: Eingabevariablen haben 1000 überschritten. Um den Grenzwert zu erhöhen, ändern Sie max_input_vars in php.ini.

Dieser PHP-Konfigurationsparameter max_input_vars wirkt sich nicht nur auf Ihre GET / POST / COOKIES-Parameter aus, sondern steuert auch Ihre Formulareingabe.

Führen Sie die folgenden Schritte aus, um den Wert festzulegen oder zu ändern.

1) Überprüfen Sie die vorhandene Einstellung / den vorhandenen Wert, indem Sie ihn in Ihrer php.ini-Datei anzeigen. Suchen Sie die php.ini-Datei mithilfe von

<?php echo getinfo(); ?>

Finden Sie den folgenden Schlüssel: Geladene Konfigurationsdatei: /etc/php/5.6/fpm/php.ini

2) Öffnen Sie die Datei php.ini im bearbeitbaren Modus und suchen Sie nach max_input_vars. Diese Zeile kann in Ihrer vorhandenen Standardeinstellung mit dem Standardwert 1000 kommentiert werden. um es zu kommentieren und mit Ihrem geeigneten Wert zu bearbeiten, zB 2500.

3) Speichern Sie die Datei und starten Sie die Dienste von PHP neu, indem Sie unten verwenden sudo service php5.6-fpm restart

Ebenso können Sie jede andere ähnliche PHP-Konfiguration nach Belieben aktualisieren.

Patel Nikhil
quelle
0

Nur zur Ergänzung. Auf einem gemeinsam genutzten Server mit mod_suphp hatte ich das gleiche Problem.

Das Deklarieren von 4 max_input_vars (einschließlich Suhosin) hat es nicht gelöst, es wurde nur bei 1000 vars (Standard) abgeschnitten und das Deklarieren von "php_value max_input_vars 6000" bei .htaccess hat den Fehler 500 ausgelöst.

Was gelöst wurde, war das Hinzufügen von Folgendem zu .htaccess, wodurch die Datei php.ini rekursiv auf diesen Pfad angewendet wird

suPHP_ConfigPath /home/myuser/public_html
Daniel
quelle
-6

Ja, füge es der php.ini hinzu, starte Apache neu und es sollte funktionieren.

Sie können es im laufenden Betrieb testen, wenn Sie möchten ini_set("max_input_vars",100)

Quaid
quelle
8
Dies wird nicht funktionieren, siehe php.net/manual/en/info.configuration.php . Muss pro Verzeichnis virtueller Host oder htaccess festgelegt werden, nicht ini_set.
Lubosdz
Wir können diese Variable über die Funktion ini_set setzen. Warum hat diese Antwort Stimmen verloren? php.net/manual/en/info.configuration.php
Ahmad