我有超过 1900 个输入框列的动态表,我无法通过表单提交提交所有字段,它只通过 60% 的行将页面保存在 php 中。我猜它的查询字符串长度限制。
我使用以下代码在网站文件夹中添加了.htaccess
文件:
RewriteEngine on
php_value post_max_size 512M
甚至我也php.ini
文件夹中添加了public_html
文件:
file_uploads = On
php_value post_max_size = 512M
upload_max_filesize = 512M
max_input_vars 2000
我有 Godaddy 的共享主机服务器。我已经尽力了,但表单只提交了 60% 的字段。即使我已经更改了 C 面板中 php 选择器选项中post_max_size值的值。
如果您使用的是 GET,您肯定会遇到浏览器的字符限制。
相反,您应该在表单中使用 POST 方法,例如
<form action="http://example.com" method="post">
当然,您的max_input_vars
应该超过您的字段最大数量。此设置分别限制超全局变量$_GET
、$_POST
和$_COOKIE
。
如果您仍在使用 POST,则应验证您的max_input_vars
设置是否处于活动状态:
<?php
echo "max_input_vars: " . ini_get('max_input_vars') . PHP_EOL;
echo "post_max_size: " . ini_get('post_max_size') . PHP_EOL;
?>
你说你在public_html
中添加了php.ini
.通常php.ini
不在此文件夹中(也许是您的主机的特殊之处?!而且似乎您的 php.ini 格式不正确,因为您使用 .htaccess 关键字php_value
并且您忘记使用等号表示max_input_vars
。
如果你的php.ini不起作用,你应该尝试将所有设置添加到你的.htaccess中,如下所示:
php_value post_max_size 512M
php_value max_input_vars 2000
正如@NigelRen建议的那样,您也可以拆分请求以减少字段总数。这可以通过使用 AJAX 来解决。它允许在不重新加载页面的情况下向服务器发送请求。一个好的JavaScript框架可以实现这一点可能是jQuery。这样,您可以在单个字段失去焦点后更新单个字段,或者添加一个单独的更新按钮,仅将这些行发送到已更改的服务器(例如,每个输入都会获得一个ID,并且您计算所有具有焦点的行(。使用此方法,您还可以使用简单循环限制发送到服务器的字段数量(例如,每个循环仅更新 100 个字段(。
另一种方法是分页。这意味着每页仅显示 x 行,因此用户只能更新这些 x 行。
我建议使用 AJAX,因为它会大大降低性能要求。