PHP max_input_vars


85

ฉันได้รับ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
ฉันไม่เห็นการอ้างอิงใด ๆmax_input_varsเลยในซอร์สโค้ด PHP 5.1.6 ดังนั้นฉันไม่แน่ใจว่าคุณเห็นมันในเอาต์พุต phpinfo () อย่างไร เท่าที่ฉันรู้ไม่มีอยู่ก่อน 5.3.9 ...
drew010

2
พารามิเตอร์หลายตัวมีค่าดีฟอลต์ที่ฮาร์ดโค้ด แต่คุณยังสามารถกำหนดค่าใหม่ได้ ความจริงที่ว่าบางสิ่งไม่ได้ถูกตั้งค่าอย่างชัดเจนใน php.ini ไม่ได้หมายความว่าคุณไม่สามารถใช้ php.ini เพื่อเปลี่ยนแปลงได้
octern

คุณได้รับข้อความแสดงข้อผิดพลาดใด กรุณาเพิ่มคำถามของคุณ
hakre


ฉันวิ่งเข้าไปในข้อผิดพลาดนี้หลังจากการอัพเกรดจากนั้นปรับลดกลับไป5.1.6 -> 5.3.3 5.1.6โยนฉันเพราะไม่มีตัวเลือกนั้นใน5.1.6 php.iniไฟล์ ฉันเพิ่มบรรทัดเพิ่มหมายเลขและข้อผิดพลาด / ปัญหาของฉันหายไป
JoshP

คำตอบ:


48

คุณสามารถเพิ่มลงใน php.ini และควรใช้งานได้ - เพิ่งทดสอบบน PHP 5.3.6


ขอบคุณนั่นก็น่ารู้แม้ว่าฉันจะใช้ 5.3.3 และไม่มีความสุขเลย
Vaughany

ขอบคุณสำหรับตัวชี้ที่ชัดเจนอย่างจริงจัง - ฉันมองหาการตั้งค่านี้เป็นเวลาหนึ่งชั่วโมง .... จนกระทั่งฉันเห็นสิ่งนี้เพิ่มมันหลอก!
jamesTheProgrammer

1
@ Vaughany โปรดทราบว่าหากคุณอยู่ในสแต็ก bitnami คุณจะต้องรีสตาร์ท php-fpm ในกรณีที่คุณใช้งานอยู่ เพียงแค่รีสตาร์ท apache จะไม่ช่วยและอาจไม่จำเป็นด้วยซ้ำหลังจากทำการเปลี่ยนแปลงเป็น /opt/bitnami/php/etc/php.ini
Shrenik

101

ข้อมูลอ้างอิงเกี่ยวกับ PHP net:

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
หรือวางคำสั่ง suhosin ทั้ง 3 รายการบน php.ini ก็โอเค
Alain Tiemblo

1
หากคุณสามารถเข้าถึง php.ini ไวยากรณ์คำสั่งคือmax_input_vars = 3000(+ เครื่องหมายเท่ากับ)
Parapluie

@ shorif2000 ฉันมีปัญหาคล้ายกันใน IIS, PHP 7 w / wincache โดยใช้ไฟล์. user.ini ปัญหาแรกคือแคช ฉันย้ายเส้นไปรอบ ๆ ตามลำดับแบบสุ่มใน. user.ini จนกระทั่งมันใช้งานได้ในที่สุด ปัญหาที่สองการเปลี่ยน 1,000 เป็น 2000 ไม่มีผล แต่เมื่อฉันย้ายทั้งบรรทัดไปยังบรรทัดอื่นมันก็ใช้ได้
Ryan Briscall

20

เพิ่งลองแก้ไขด้วย 5.3.3 และไม่มีการเปลี่ยนแปลงใด ๆ Googling ไปรอบ ๆ ฉันพบหน้าเว็บนี้http://anothersysadmin.wordpress.com/2012/02/16/php-5-3-max_input_vars-and-big-forms/ โดยมีรายละเอียดการตั้งค่าอื่น ๆ ซึ่งจำเป็นต้องเปลี่ยนแปลงหากเซิร์ฟเวอร์ของคุณใช้แพทช์ Suhosin Apache ซึ่งภายใต้ Debian ทำ

เว็บไซต์อธิบาย:

ดังนั้นหากคุณต้องการเพิ่มจำนวนนี้เป็น 3000 จากค่าเริ่มต้นซึ่งเป็น 1000 คุณต้องใส่ php.ini บรรทัดเหล่านี้:

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

ฉันทดสอบแล้ว (เพิ่มการตั้งค่าให้กับ php.ini ทั้งใน / etc / php5 / apache2 และ / etc / php5 / cli และรีสตาร์ท Apache สำเร็จ) แต่ยังไม่มีตัวแปร max_input_vars ใน phpinfo

ไซต์บางแห่งชี้ไปที่ PHP 5.3.9 เป็น PHP เวอร์ชันแรกที่จะมีการเปลี่ยนแปลงนี้ดังนั้นความผิดของฉันที่ทำ RTM ไม่ถูกต้องตั้งแต่แรกแม้ว่าฉันสนใจที่จะเห็นคนรายงานว่าทำงานในเวอร์ชันที่สูงกว่า 5.3.3 แต่ต่ำกว่า 5.3.9


9

คุณต้องยกเลิกการใส่ค่า max_input_vars ในไฟล์ php.ini และเพิ่ม (exp 2000) อย่าลืมรีสตาร์ทเซิร์ฟเวอร์ซึ่งจะช่วยได้ 99,99%


สิ่งนี้ใช้ไม่ได้กับฉันใน Ubuntu 12.04 ตั้งค่าเป็น 3000 sudo service apache2 restartและใช้ ฉันต้องรีสตาร์ท Ubuntu หรือไม่
motorbaby

@motorbaby หากคุณมีค่านี้แสดงความคิดเห็นใน php.ini แสดงว่าคุณมีเพียงบริการยกเลิกการแสดงความคิดเห็นและเริ่มต้นใหม่ ไม่จำเป็นต้องรีสตาร์ท OS แต่สามารถทำได้ แต่ฉันไม่เห็นเหตุผลใด ๆ ในเรื่องนี้ หากคุณไม่มีให้ใช้โซลูชัน @ lubosdz หากทั้งสองอย่างไม่สามารถช่วยได้ให้ตรวจสอบว่าคุณทำการเปลี่ยนแปลงในตำแหน่งที่ถูกต้องหรือไม่เช่นคุณมีไฟล์ php.ini หลายไฟล์ นอกจากนี้คุณสามารถลองใช้ "sudo service apache2 reload" เพื่อโหลดการกำหนดค่าใหม่ได้
Oleg Sapishchuk

สายอยู่ที่นั่น ฉันลบ;และเปลี่ยนค่าเป็น 3000 ปัญหาน่าจะเป็นแคชของเบราว์เซอร์ ปิด PHPMyAdmin และเปิดในแท็บใหม่และตอนนี้ใช้งานได้ ขอบคุณ!
motorbaby

7

ตอนนี้เป็นปี 2018 และฉันเพิ่งติดปัญหานี้เมื่อต้องส่งคำขอที่เกินไฟล์max_input_vars. และฉันได้หาวิธีแก้ปัญหาที่มือใหม่อย่างฉันลืมที่จะเริ่มบริการ php fpm ใหม่หลังจากเปลี่ยนmax_input_varsพารามิเตอร์ เพราะฉันพยายามรีสตาร์ท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 Stretch,php7.0


ฉันเสียเวลาทั้งวันในการพยายามหาวิธีทำให้แน่ใจว่ามีการใช้การเปลี่ยนแปลงและอ่านวิธีแก้ปัญหามากมาย พวกเขากล่าวถึงทั้งหมดหลังจากทำการเปลี่ยนแปลง php.ini คุณควรรีสตาร์ท apache ซึ่งไม่ได้สร้างความแตกต่าง การรีสตาร์ท php7.2-fpm ตามที่ระบุไว้ในโซลูชันนี้ช่วยแก้ปัญหาได้!
nightrain

3

การใช้คำสั่งนี้ช่วยลดความเป็นไปได้ของการปฏิเสธการโจมตีบริการที่ใช้การชนกันของแฮช หากมีตัวแปรอินพุตมากกว่าที่กำหนดโดยคำสั่งนี้จะมีการออก E_WARNING และตัวแปรอินพุตเพิ่มเติมจะถูกตัดทอนออกจากคำขอ

ฉันสามารถแนะนำไม่ให้ขยายค่าเริ่มต้นซึ่งเป็น 1000 และขยายฟังก์ชันการทำงานของแอปพลิเคชันโดยการต่อเนื่องคำขอหรือส่งคำขอโดยบล็อก มิฉะนั้นคุณสามารถขยายไปยังการกำหนดค่าที่จำเป็น

แน่นอนต้องตั้งค่าใน php.ini


3

โปรดทราบว่าคุณต้องใส่สิ่งนี้ในไฟล์ ".user.ini" ใน Centos7 แทนที่จะเป็น "php.ini" ซึ่งเคยทำงานใน Centos6 คุณสามารถใส่ ".user.ini" ในไดเร็กทอรีย่อยใดก็ได้เพื่อให้มีผลเฉพาะไดเร็กทอรีนั้น

.user.ini:

max_input_vars = 3000

ทดสอบกับ Centos7 และ PHP 5.6.33



0

บล็อก Cpanels ใหม่เพื่อดูไฟล์. htaccess หรือหากคุณเพิ่ม. user.ini คุณจะไม่สามารถมองเห็นได้ แต่ด้วยการแฮ็กเพียงเล็กน้อยคุณก็สามารถใช้งานได้ แก้ไขตัวอย่างเช่น wp-config.php และในแถบ URL แทนที่ wp-config.php โดย. htaccess ตอนนี้คุณสามารถวางค่าและบันทึกได้ ป้อนคำอธิบายภาพที่นี่


0

เพิ่งมีปัญหาเดียวกันในการเพิ่มรายการเมนูลงใน Wordpress ฉันใช้ Wordpress 4.9.9 บน Ubuntu 18.04, PHP 7.0 ฉันไม่ใส่ความคิดเห็นในบรรทัดต่อไปนี้และเพิ่มเป็น 1,500 นิ้ว/etc/php/7.0/apache2/php.ini

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

จากนั้นใช้สิ่งต่อไปนี้เพื่อให้เกิดการเปลี่ยนแปลง:

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

หวังว่าจะช่วยได้


0

"ข้อความ PHP: คำเตือน PHP: ไม่ทราบ: ตัวแปรอินพุตเกิน 1,000 หากต้องการเพิ่มขีด จำกัด ให้เปลี่ยน max_input_vars ใน php.ini

พารามิเตอร์การกำหนดค่า php max_input_vars นี้จะส่งผลต่อไม่เพียง แต่พารามิเตอร์ GET / POST / COOKIES ของคุณเท่านั้น แต่ยังควบคุมการป้อนข้อมูลแบบฟอร์มของคุณด้วย

ในการตั้งค่าหรือเปลี่ยนค่าให้ทำตามขั้นตอนด้านล่าง

1) ตรวจสอบการตั้งค่า / ค่าที่มีอยู่โดยดูในไฟล์ php.ini ของคุณค้นหาไฟล์ php.ini โดยใช้

<?php echo getinfo(); ?>

ค้นหาคีย์ด้านล่าง: Loaded Configuration File: /etc/php/5.6/fpm/php.ini

2) เปิดไฟล์ php.ini ในโหมดแก้ไขและค้นหา max_input_vars บรรทัดนี้อาจได้รับการแสดงความคิดเห็นในการตั้งค่าเริ่มต้นที่มีอยู่ของคุณด้วยค่าเริ่มต้นที่ 1000 ดังนั้นลบ; เพื่อยกเลิกการแสดงความคิดเห็นและแก้ไขด้วยค่าที่เหมาะสมเช่น 2500

3) บันทึกไฟล์และรีสตาร์ทบริการของ PHP โดยใช้ด้านล่าง sudo service php5.6-fpm restart

ในทำนองเดียวกันคุณสามารถอัปเดตการกำหนดค่า PHP อื่น ๆ ที่คล้ายกันเพื่อความสะดวกของคุณ


0

เพียงเพื่อเสริม บนเซิร์ฟเวอร์ที่ใช้ร่วมกันโดยใช้ mod_suphp ฉันมีปัญหาเดียวกัน

การประกาศ max_input_vars 4 รายการ (รวม suhosin) ไม่ได้แก้ไขเพียงแค่ตัดทอนไว้ที่ 1,000 vars (ค่าเริ่มต้น) และประกาศ "php_value max_input_vars 6000" บน. htaccess ส่งข้อผิดพลาด 500

สิ่งที่แก้ไขได้คือการเพิ่มสิ่งต่อไปนี้ใน. htaccess ซึ่งใช้ไฟล์ php.ini ซ้ำกับเส้นทางนั้น

suPHP_ConfigPath /home/myuser/public_html

-6

ใช่เพิ่มลงใน php.ini รีสตาร์ท apache และควรใช้งานได้

คุณสามารถทดสอบได้ทันทีหากคุณต้องการด้วย ini_set("max_input_vars",100)


8
นี้จะไม่ทำงานให้ดูphp.net/manual/en/info.configuration.php ต้องตั้งค่าต่อโฮสต์เสมือนของไดเรกทอรีหรือ htaccess ไม่ใช่ ini_set
lubosdz

เราสามารถตั้งค่าตัวแปรนี้ผ่านฟังก์ชัน ini_set ทำไมคำตอบนี้ถึงได้รับการโหวตลง? php.net/manual/th/info.configuration.php
อะหมัด
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.