PHP max_input_vars


85

Tôi nhận được một max_input_varsthông báo lỗi.

Tôi hiểu rằng có một php.inicài đặt có thể thay đổi điều này bắt đầu từ phiên bản 5.3.9, tuy nhiên, tôi đang chạy phiên bản 5.1.6.

Khi tôi xem thông tin cấu hình cho máy chủ 5.1.6 của mình, nó hiển thị max_input_varsgiá trị là 1000.

Câu hỏi của tôi là: Mặc dù tôi đang chạy 5.1.6, tôi thấy cài đặt này từ phpinfo()nhưng nó không có trong php.initệp. Điều này có nghĩa là giá trị được mã hóa cứng trong phiên bản PHP này và không thể thay đổi?


2
Tôi không thấy bất kỳ tham chiếu nào đến max_input_varstrong mã nguồn PHP 5.1.6 nên tôi không chắc bạn thấy nó như thế nào trong đầu ra phpinfo (). Theo như tôi biết, nó không tồn tại trước 5.3.9 ...
drew010

2
Nhiều tham số có giá trị mặc định được mã hóa cứng, nhưng bạn vẫn có thể gán một giá trị mới. Thực tế là một cái gì đó không được đặt rõ ràng trong php.ini không có nghĩa là bạn không thể sử dụng php.ini để thay đổi nó.
octern

Bạn nhận được thông báo lỗi nào? Vui lòng thêm nó vào câu hỏi của bạn.
hakre


Tôi gặp phải lỗi này sau khi nâng cấp từ 5.1.6 -> 5.3.3, sau đó hạ cấp trở lại 5.1.6. Hãy ném cho tôi vì tùy chọn đó không tồn tại trong 5.1.6 php.initệp. Tôi đã thêm dòng, tăng số và lỗi / sự cố của tôi đã biến mất.
JoshP

Câu trả lời:


48

Bạn có thể thêm nó vào php.ini và nó sẽ hoạt động - chỉ cần thử nghiệm nó trên PHP 5.3.6.


Cảm ơn, điều đó đáng để biết, mặc dù tôi đang ở trên 5.3.3 và không có niềm vui.
Vaughany

cảm ơn vì con trỏ rõ ràng đó, nghiêm túc - Tôi đã tìm kiếm cài đặt này trong một giờ .... cho đến khi tôi nhìn thấy điều này, hãy thêm nó giả!
jamesTheProgrammer

1
@Vaughany Xin lưu ý rằng nếu bạn đang ở trên ngăn xếp bitnami thì bạn sẽ phải khởi động lại php-fpm trong trường hợp bạn đang sử dụng nó. Chỉ cần khởi động lại apache sẽ không hữu ích và thậm chí có thể không được yêu cầu sau khi thực hiện thay đổi đối với /opt/bitnami/php/etc/php.ini
Shrenik 22/09/15

101

Tham khảo trên PHP net:

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

Xin lưu ý, bạn không thể đặt chỉ thị này trong thời gian chạy với chức năng ini_set(name, newValue), ví dụ:

ini_set('max_input_vars', 3000);

Nó sẽ không làm việc.

Như đã giải thích trong tài liệu, chỉ thị này chỉ có thể được đặt cho mỗi phạm vi thư mục, có nghĩa là thông qua tệp .htaccess, httpd.conf hoặc .user.ini (kể từ PHP 5.3).

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

Thêm chỉ thị vào php.ini hoặc đặt các dòng sau vào .htaccess sẽ hoạt động:

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
Hoặc đặt cả 3 chỉ thị suhosin trên php.ini là ok.
Alain Tiemblo

1
Nếu bạn có quyền truy cập vào php.ini, thì cú pháp chỉ thị là max_input_vars = 3000(+ dấu bằng).
Parapluie

@ shorif2000 Tôi gặp sự cố tương tự trong IIS, PHP 7 w / wincache, sử dụng tệp .user.ini. Vấn đề đầu tiên là bộ nhớ cache. Tôi đã di chuyển các dòng xung quanh theo thứ tự ngẫu nhiên, trong .user.ini cho đến khi cuối cùng nó hoạt động. Vấn đề thứ hai, thay đổi 1000 thành 2000 không có tác dụng, nhưng khi tôi chuyển toàn bộ dòng sang một dòng khác, thì nó hoạt động.
Ryan Briscall

20

Vừa thử sửa lỗi này với 5.3.3 và không có thay đổi. Googling xung quanh, tôi thấy trang web này http://anothersysadmin.wordpress.com/2012/02/16/php-5-3-max_input_vars-and-big-forms/ nêu chi tiết các cài đặt khác cần thay đổi nếu máy chủ của bạn sử dụng bản vá Suhosin mà Apache trong Debian làm.

Trang web giải thích:

Vì vậy, nếu bạn muốn tăng con số này lên, chẳng hạn như 3000 từ số mặc định là 1000, bạn phải đặt vào php.ini của mình những dòng sau:

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

Tôi đã thử nghiệm nó (đã thêm cài đặt vào php.ini cả trong / etc / php5 / apache2 và / etc / php5 / cli, và khởi động lại Apache thành công) nhưng vẫn không có biến max_input_vars trong phpinfo.

Một số trang web trỏ đến PHP 5.3.9 là phiên bản PHP đầu tiên sẽ thực hiện thay đổi này, vì vậy lỗi của tôi là không RTM đúng cách ngay từ đầu, mặc dù tôi muốn thấy mọi người báo cáo rằng nó hoạt động trong phiên bản 5.3.3 trên nhưng dưới 5,3,9.


9

Bạn cần bỏ ghi chú giá trị max_input_vars trong tệp php.ini và tăng nó lên (exp. 2000), cũng đừng quên khởi động lại máy chủ của bạn, điều này sẽ giúp ích cho 99,99%.


Điều này không hoạt động đối với tôi trên Ubuntu 12.04. Đặt nó thành 3000 và sử dụng sudo service apache2 restart. Tôi có cần khởi động lại Ubuntu không?
motorbaby

@motorbaby, Nếu bạn nhận xét giá trị này trong php.ini, thì bạn chỉ có dịch vụ bỏ ghi chú và khởi động lại. Khởi động lại hệ điều hành là không cần thiết, nhưng có thể được thực hiện, nhưng tôi không thấy bất kỳ ý nghĩa nào trong việc này. Nếu bạn không có nó, hãy sử dụng giải pháp @ lubosdz. Nếu cả hai đều không hữu ích, hãy kiểm tra xem bạn có đang thực hiện các thay đổi ở đúng vị trí hay không, chẳng hạn như bằng cách nào đó bạn có một số tệp php.ini. Ngoài ra bạn có thể thử chỉ sử dụng "apache2 tải lại dịch vụ sudo" cho các cấu hình tải lại
Oleg Sapishchuk

Dòng đã ở đó. Tôi đã xóa ;và thay đổi giá trị thành 3000. Vấn đề có thể là bộ nhớ cache của trình duyệt. Đóng PHPMyAdmin và mở trong một tab mới và nó hiện hoạt động. Cảm ơn!
motorbaby

6

Bây giờ là năm 2018 Và tôi chỉ gặp vấn đề này khi tôi phải gửi một yêu cầu vượt quá max_input_vars. Và tôi đã nghĩ ra một giải pháp mà người mới như tôi đã quên khởi động lại dịch vụ php fpm sau khi thay đổi thông số max_input_vars. bởi vì tôi chỉ cố gắng khởi động lại apache2dịch vụ chứ không phải php fpm

  1. bỏ ghi chú mã tại /etc/php/7.0/fpm/php.inivà đặt số như bạn muốn
    max_input_vars = 4000
  2. khởi động lại dịch vụ php fpm, vì tôi sử dụng php 7. Do đó,
    sudo service php7.0-fpm restart

Hy vọng nó sẽ giúp
Kiểm tra trên Debian Stretch,php7.0


Tôi đã lãng phí cả ngày để cố gắng tìm ra cách đảm bảo các thay đổi được áp dụng và đọc rất nhiều giải pháp. Tất cả đều đề cập sau khi thực hiện thay đổi đối với php.ini, bạn nên khởi động lại apache, điều này không tạo ra sự khác biệt. Khởi động lại php7.2-fpm như được lưu ý trong giải pháp này đã giải quyết được vấn đề!
nightrain

3

Việc sử dụng chỉ thị này giảm thiểu khả năng xảy ra các cuộc tấn công từ chối dịch vụ sử dụng xung đột băm. Nếu có nhiều biến đầu vào hơn được chỉ định bởi chỉ thị này, một E_WARNING sẽ được đưa ra và các biến đầu vào khác sẽ bị cắt bớt khỏi yêu cầu.

Tôi có thể đề nghị không mở rộng giá trị mặc định là 1000 và mở rộng chức năng ứng dụng bằng cách tuần tự yêu cầu hoặc gửi yêu cầu theo khối. Nếu không, bạn có thể mở rộng điều này đến cấu hình cần thiết.

Nó chắc chắn cần phải thiết lập trong php.ini


3

Lưu ý rằng bạn phải đặt tệp này trong tệp ".user.ini" trong Centos7 chứ không phải "php.ini" đã từng hoạt động trong Centos6. Bạn có thể đặt ".user.ini" trong bất kỳ thư mục con nào để chỉ ảnh hưởng đến thư mục đó.

.user.ini:

max_input_vars = 3000

Đã thử nghiệm trên Centos7 và PHP 5.6.33.


2

php_value max_input_vars 6000

"Đặt dòng này trên tệp .htaccess của trang web của bạn."


0

Khối Cpanels mới để xem tệp .htaccess hoặc nếu bạn thêm .user.ini thì bạn sẽ không thể xem được. nhưng với một chút hack bạn có thể làm cho nó hoạt động. Chỉnh sửa ví dụ wp-config.php và trong thanh URL thay thế wp-config.php bằng .htaccess bây giờ bạn có thể dán các giá trị và lưu nó. nhập mô tả hình ảnh ở đây


0

Chỉ gặp vấn đề tương tự khi thêm các mục menu vào Wordpress. Tôi đang sử dụng Wordpress 4.9.9 trên Ubuntu 18.04, PHP 7.0. Tôi chỉ đơn giản là bỏ ghi chú dòng sau và tăng nó lên 1500 in/etc/php/7.0/apache2/php.ini

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

Sau đó, sử dụng những điều sau để thực hiện thay đổi:

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

Hy vọng rằng sẽ giúp.


0

"Thông báo PHP: Cảnh báo PHP: Không xác định: Các biến đầu vào vượt quá 1000. Để tăng giới hạn, hãy thay đổi max_input_vars trong php.ini.

Tham số cấu hình php max_input_vars này sẽ không chỉ ảnh hưởng đến các tham số GET / POST / COOKIES mà nó còn kiểm soát bất kỳ Đầu vào biểu mẫu nào của bạn.

Để đặt hoặc thay đổi giá trị của nó, hãy làm theo các bước dưới đây.

1) kiểm tra cài đặt / giá trị hiện có bằng cách xem nó trong tệp php.ini của bạn Định vị tệp php.ini bằng cách sử dụng

<?php echo getinfo(); ?>

tìm khóa bên dưới: Tệp cấu hình đã tải: /etc/php/5.6/fpm/php.ini

2) Mở tệp php.ini ở chế độ có thể chỉnh sửa và thực hiện tìm kiếm max_input_vars Dòng này có thể được nhận xét trong cài đặt mặc định hiện tại của bạn với giá trị mặc định là 1000, Vì vậy, hãy loại bỏ; để bỏ ghi chú và Chỉnh sửa nó với giá trị phù hợp của bạn, ví dụ như 2500.

3) Lưu tệp và Khởi động lại các Dịch vụ của PHP bằng cách sử dụng bên dưới sudo service php5.6-fpm restart

Tương tự, bạn có thể cập nhật bất kỳ Cấu hình PHP tương tự nào khác một cách dễ dàng.


0

Chỉ để bổ sung. Trên một máy chủ được chia sẻ bằng mod_suphp, tôi đã gặp sự cố tương tự.

Khai báo 4 max_input_vars (bao gồm suhosin), không giải quyết được nó, nó chỉ tiếp tục cắt bớt trên 1000 vars (mặc định) và khai báo "php_value max_input_vars 6000" trên .htaccess đã gây ra lỗi 500.

Điều giải quyết được vấn đề là thêm phần sau vào .htaccess, áp dụng đệ quy tệp php.ini vào đường dẫn đó

suPHP_ConfigPath /home/myuser/public_html

-6

Có, thêm nó vào php.ini, khởi động lại apache và nó sẽ hoạt động.

Bạn có thể kiểm tra nó ngay lập tức nếu bạn muốn ini_set("max_input_vars",100)


8
Điều này sẽ không hoạt động, hãy xem php.net/manual/en/info.configuration.php . Phải được đặt cho mỗi máy chủ ảo hoặc htaccess thư mục, không phải ini_set.
lubosdz

Chúng ta có thể đặt biến này thông qua hàm ini_set. Tại sao câu trả lời này lại nhận được phiếu bầu? php.net/manual/en/info.configuration.php
Ahmad
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.