php - 什么会导致提交后的 http 表单中的数据主体为空?

标签 php javascript html http jsp

背景:

我维护了三个使用自动错误跟踪(通过包含错误详细信息的电子邮件)的应用程序。其中两个是用 java 和 php 编写的。

问题:

我时不时地收到一个操作页面所需的缺少 ID 的错误跟踪消息。错误跟踪包括始终为空的请求内容。请求始终为 POST 类型,它可以由简单的页面或 AJAX 表单提交后生成。

[编辑] 不涉及文件上传。这是一个简单的表单方法="POST"。

我看不出浏览器类型与空请求之间有任何特殊关联。我显然无法在开发或测试平台上重现此错误,因为它是随机的。

我怀疑这个问题也会影响其他平台,比如.NET

关于什么会导致提交的表单完全为空以及如何最好地解决它的任何想法,而不是在缺少必需参数时简单地抛出错误(更多的 IllegalStateException 因为这些操作页面永远不会通过 URL 访问)。

最佳答案

当执行 POST 请求时,PHP 会使用已发布数据的大小填充变量 $_SERVER['CONTENT_LENGTH']。它不适用于 GET 请求。

如果发布的数据太大(大于 PHP 中的 post_max_size 指令的值)或具有无效结构,$_POST 数组为空(因为 PHP 无法解码发布数据),但 $_SERVER['CONTENT_LENGTH'] 仍在填充。

我相信 JSP 应该有类似的东西。

如果您不发送 $_SERVER(或等效的 JSP)的内容,我建议您开始这样做。如果这样做,请检查它的 CONTENT_LENGTH 值(或等效的 JSP)。


此外,在 PHP 中,您可以启用 always_populate_raw_post_data 指令并在您的电子邮件中包含 $HTTP_RAW_POST_DATA。它不适用于具有 enctype='multipart/form-data' 的表单(用于上传文件的表单),但是 an answer to another SO question描述了一个解决方法。

关于php - 什么会导致提交后的 http 表单中的数据主体为空?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6152740/

相关文章:

php - 从 WordPress 页面中的 MySQL 数据库填充下拉菜单

javascript - 将一键单击事件处理程序应用于多个元素

jquery - 如何制作 Logo css slider ?

html - 我设计并编写了一个网站,但是当我放大浏览器时,它会调整大小

javascript - Angularjs $location 第一次不会触发,下次使用旧值

javascript - jQuery 在点击时根据用户输入创建列表项

php - 查找偏移量之前最后一次出现的空白字符?

php - CakePHP:唯一违规:7 错误:重复键值违反唯一约束

php - 如何在php中将数组存储为键值对

javascript - 将鼠标悬停在日期时间输入字段上时禁用滚动