2012-04-24 59 views
59

我收到一條max_input_vars錯誤消息。PHP max_input_vars

據我所知,有一個php.ini設置可以從版本5.3.9開始改變,但是我運行的是版本5.1.6。

當我查看我的5.1.6服務器的配置信息,它表明max_input_vars值爲1000

我的問題是:雖然我跑5.1.6,我看到phpinfo()此設置,但它不是在php.ini文件中。這是否意味着該值在此版本的PHP中是硬編碼的並且不能更改?

+2

我在PHP 5.1.6源代碼中完全沒有看到對'max_input_vars'的任何引用,所以我不確定你是如何在phpinfo()輸出中看到它的。據我所知,它在5.3.9之前並不存在...... – drew010 2012-04-24 18:31:10

+2

許多參數都有硬編碼的默認值,但您仍然可以分配一個新值。在php.ini中沒有明確設置的事實並不意味着你不能使用php.ini來改變它。 – octern 2012-04-24 18:51:42

+0

你會得到哪個錯誤信息?請將其添加到您的問題。 – hakre 2012-04-24 19:23:39

回答

30

您可以將它添加到php.ini中,它應該可以正常工作 - 只需在PHP 5.3.6上進行測試即可。

+0

後可能甚至不需要。謝謝,這是值得了解的,儘管我在5.3.3上並沒有喜悅。 – Vaughany 2012-07-05 07:53:39

+0

感謝那個明顯的指針,認真 - 我正在尋找這個設置一個小時....直到我看到這個,加上它的虛擬! – jamesTheProgrammer 2012-08-24 13:56:36

+0

@Vaughany請注意,如果您在bitnami堆棧中,那麼您將不得不重新啓動php-fpm以防您正在使用它。只需重新啓動apache就無濟於事,在更改/opt/bitnami/php/etc/php.ini之後可能甚至不需要。 – Shrenik 2015-09-22 11:06:58

-5

是的,將它添加到php.ini,重新啓動Apache,它應該工作。

你可以,如果你想與ini_set("max_input_vars",100)

+8

這不起作用,請參閱http://www.php.net/manual/en/。 info.configuration.php。必須爲每個目錄虛擬主機或htaccess設置,而不是ini_set。 – lubosdz 2013-03-06 09:40:55

17

剛纔已經嘗試此修復程序5.3.3,有沒有改變在飛行測試。如果您的服務器使用的是Debian下的Apache所提供的Suhosin補丁,那麼我會發現這個網頁http://anothersysadmin.wordpress.com/2012/02/16/php-5-3-max_input_vars-and-big-forms/詳細描述了其他需要更改的設置

該網站解釋說:

所以,如果你想從默認 數是1000增加這個數字,比如說,3000,你必須把你的php.ini這些行:

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

我測試(添加的設置爲php.ini都在/ etc/PHP5/AP ache2和/ etc/php5/cli,併成功重啓Apache),但phpinfo中仍然沒有max_input_vars變量。

有幾個網站指出PHP 5.3.9是第一個需要進行此更改的PHP版本,所以我的錯誤首先不是RTM,儘管我有興趣看到有人報告它在版本中工作高於5.3.3但低於5.3.9。

+0

這適用於我的PHP 5.3.3 – rethab 2013-12-04 10:54:01

+0

這一個工作得很好。謝謝。 – aakash 2014-02-25 04:43:24

76

參考PHP的淨:

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

請注意,你可以不設置此指令在運行時使用功能ini_set(name, newValue),例如

ini_set('max_input_vars', 3000); 

它不起作用。

正如文檔中所述,該指令只能在每個目錄範圍內設置,這意味着通過.htaccess文件,httpd.conf或.user.ini(自PHP 5.3起)。

參見http://php.net/manual/en/configuration.changes.modes.php

添加指令到php.ini中或放置以下行成。htaccess的將工作:

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

或者在php.ini中放置所有3個suhosin指令都可以。 – 2013-12-10 10:29:20

+0

無法正常工作,使用php7如果有幫助 – shorif2000 2017-07-25 11:13:17

+0

如果您有權訪問php.ini,指令語法爲'max_input_vars = 3000'(+等號)。 – Parapluie 2017-11-27 19:25:29

7

你需要在php.ini文件中取消註釋max_input_vars價值,增加它(EXP 2000),也不要忘了重新啓動服務器,這將有助於爲99.99%。

+0

這在Ubuntu 12.04上不適用於我。將其設置爲3000並使用'sudo service apache2 restart'。我需要重新啓動Ubuntu嗎? – motorbaby 2016-10-11 18:50:46

+0

@motorbaby,如果你有這個值在php.ini中註釋,那麼你只有取消註釋並重新啓動服務。重新啓動操作系統是不需要的,但可以完成,但我沒有看到任何意義。如果您沒有它,請使用@ lubosdz解決方案。如果兩者都不起作用,那麼檢查你是否在正確的位置進行了修改,例如你有幾個php.ini文件。你也可以嘗試使用「sudo service apache2 reload」重新加載配置 – 2016-10-12 05:38:49

+0

該線路在那裏。我刪除了';'並將其值更改爲3000.問題可能是瀏覽器的緩存。關閉PHPMyAdmin並在新標籤中打開,現在可以使用。謝謝! – motorbaby 2016-10-12 19:07:49

3

該指令的使用緩解了使用散列衝突的拒絕服務攻擊的可能性。如果有更多的輸入變量超出此指令指定的範圍,則發出E_WARNING,並從請求中截斷更多輸入變量。

我可以建議不要擴展默認值1000,並通過序列化請求或按塊發送請求來擴展應用程序功能。否則,您可以將其擴展到所需的配置。

這無疑需要建立在php.ini

0

注意,您必須把這個Centos7文件「.user.ini」中,而不是其應用於Centos6工作‘的php.ini’。您可以將「.user.ini」放在任何子目錄中,以便僅影響該目錄。

.user.ini:

max_input_vars = 3000 

測試在Centos7和PHP 33年6月5日。

1

現在是2018年了。當我必須發送一個超過max_input_vars的請求時,我就陷入了這個問題。而且我想出了一個解決方案,像我這樣的newie在更改max_input_vars參數後忘記重新啓動php fpm服務。因爲我只嘗試重新啓動apache2服務,而不是PHP FPM

  1. /etc/php/7.0/fpm/php.ini取消註釋代碼,並根據需要
    max_input_vars = 4000
  2. 重啓PHP FPM服務,因爲我用PHP 7.因此設置數量,
    sudo service php7.0-fpm restart

希望它可以幫助
測試上Debian Stretchphp7.0

相關問題