【发布时间】:2021-09-17 03:01:31
【问题描述】:
我有一个包含少量(最多 10 个)输入的表单。其中一个输入是文件上传输入。表单布局如下:
<form method="post" ...>
<input type="hidden" name="input_no_1" value="value_no_1">
<input type="file" name="input_no_2">
<input type="hidden" name="input_no_3" value="value_no_3">
<button type="submit">send</button>
99.9% 的时间这个表单都可以正常工作,并且我在 PHP 端获得了所有数据。但是,每隔一段时间,POST 数据就会被截断,并且 $_POST 变量只包含以下内容:
input_no_1 => value_no_1
文件输入和文件输入后面的所有其他输入都丢失了。
此错误几乎只发生在包含“Mobile Safari”的用户代理中。我怀疑手机用户可能使用了不太可靠的网络连接,因此他们的请求被中止,PHP 没有收到全部上传的数据。
在我的应用程序中,我需要知道 $_POST 数组中的数据是否完整。我期待如果 HTTP 服务器没有收到整个请求,我什至不会从 PHP 端看到它。
我正在使用 apache/fpm。 upload_max_filesize 和 post_max_size 都设置为 2G,远不及上传文件的大小。
问题:在 PHP 中处理不完整的 POST 数据的最佳方法是什么?有没有办法阻止这些请求到达我的应用程序,如果没有,有没有办法知道发布的数据是否完整?我不想在表单末尾添加任何字段,只是为了了解请求是否完整:)
【问题讨论】:
-
如果它表现得像你说的(文件输入之后的所有内容都丢失了),包括最后的“控制”输入实际上似乎是检测不完整有效负载的优雅解决方案。问题是,您可能总是需要向服务器发送一些东西,以检查您发送的内容(从客户端)和您收到的内容(在服务器中)。也许计算数据的哈希值并将其与您收到的内容进行比较,但您仍然必须实际发送它。
标签: php forms apache file-upload