这种负载当然是可以管理的,具体取决于您希望每个字段包含多少数据,或者更确切地说,取决于您确定每个字段可以包含的最大数据量。在 PHP 中,HTTP POST 请求正文的最大大小(即包含表单编码值的部分)由ini 值post_max_size
确定。它的默认值为 2MB,但您可以在您的php.ini
:
post_max_size = 10M # megabytes
或在您的.htaccess
:
php_value post_max_size 10M
设置时要小心,因为它不应超过系统上可用的 RAM 量。还要考虑您可能有多个用户请求此页面,如果他们每个人都为他们的请求分配了过多的 RAM,他们可能会挂起或崩溃您的服务器。
但是,请考虑这里的数学。即使您有 100 个字段,每个字段包含 20 个字节,也只有 2000 个字节,大约 2 KB。即使 1 Mbps 的上传速度非常慢,您的用户也可以每秒上传 128 KB。在这个速度下,100 个字段中的每一个都必须包含 1311 字节的数据,上传过程需要 1 秒。
在 Apache 上,默认超时为 300 秒,因此您的表单字段必须包含总计 37.5 MB 的大小,Apache 才会超时。您的主机(或您的服务器管理员)可能会稍微更改此设置,并且可能设置为更合理的值,例如 30 秒。但仍处于此限制,您将需要 3.75 MB 的数据,这可能比 100 个字段可以包含的数据多得多。
您也不应该担心客户端,因为即使是最吝啬的浏览器 (IE) 也将 POST 上传限制为 2 GB。
基本上,我的观点是,即使连接速度很慢,HTTP 和您的服务器也能够处理这么多字段。我不确定 PHP 解析所有这些需要多长时间(您必须在服务器上对其进行基准测试),但我想影响可以忽略不计。
从用户的角度来看,我会说 100 个字段将是一个非常令人生畏的景象。如果可能的话,最好将您的表单分成更友好和更小的步骤,引导用户完成填写表单的过程。如果您不想将表单拆分为多个步骤,请至少考虑使用 javascript 保存表单的状态。请注意,在W3C 中推荐 5MB 的存储空间localStorage
,因此这应该有足够的空间来存储您的所有字段。还要看看这个使用 cookie 的后备,但要厌倦。Cookie 的限制比localStorage
. 我读过cookie 每个限制为 4KB,每个域 20 个 cookie. 您可能希望将存储的表单字段分配到多个 cookie 中,例如 10 个 cookie 中的 10 个表单字段。您可以使用以下方法在 cookie 中存储多个输入值encodeURIComponent()
:
var inputs = document.forms[0].getElementsByTagName('input')
i = 0,
date = new Date(),
expires;
// Expires date (1 day in future)
date.setTime(date.getTime()+(24*60*60*1000));
expires = date.toGMTString();
for(var cookieNumber = 0; cookieNumber < 10; cookieNumber++) {
var cookie = [];
for(; i < (cookienumber * 10 + 10); i++) {
cookie.append(encodeURIComponent(inputs[i].name) + '=' + encodeURIComponent(inputs[i].value));
}
document.cookie = 'savedForm' + cookieNumber + '=' + cookie.join('&') + '; expires =' + expires;
}
为确保在用户键入时保存所有内容,您可能需要更新存储的数据onchange
,或者,如果您想要最多保存第二次,onkeyup
.
另外,为了方便用户,当提交表单时,所有保存的 cookie 和localStorage
表单字段数据都应该被清除,这样当他们再次访问表单时,所有字段都将为空并读取新数据输入。