php - Apache 2.4 + PHP 7.2 prefork mpm + 文件上传导致20秒后部分上传错误

标签 php apache file-upload

我注意到我们的 Web 应用程序存在一个问题,处理文件上传的应用程序代码会间歇性地遇到文件上传错误 3。我不确定我们的用户是如何触发此错误的,但我确实知道这样做的人会通过不稳定或缓慢的互联网连接(移动热点、公共(public) WiFi 等)上传文件。因此,我使用 Chrome 开发工具的节流功能(快速 3g)并上传一个 10mb 的文件进行了测试,该文件大约需要一分钟或更长时间才能完成。我们使用 Dropzonejs 库来处理上传,没有任何分块。正好 22 - 23 秒后,连接似乎总是被中止,但 Apache 仍然继续处理它收到的不完整请求正文并将其传递给 PHP,从而导致部分上传错误。

我似乎无法弄清楚是什么导致了这种情况的发生。 PHP 配置将 max_execution_time 和 max_input_time 分别设置为 0 和 -1。发布和上传最大大小设置得相对较高,而且文件上传大小似乎并不重要。只要上传请求时间超过 22 - 23 秒,就会出现问题。我尝试禁用 mod_reqtimeout 但没有什么区别。我尝试过的其他事情是修改 apache 超时值并禁用 keepalive,但它仍然在 20 秒后给我带来一些问题(该时间来自浏览器的网络选项卡)。

我在 apache 的错误日志中没有看到任何内容,并且访问日志使这些请求显得合法,因为 apache 仍然继续像平常一样处理不完整的请求。

我最初认为可能是 dropzonejs 杀死了 ajax 请求连接,但我也在使用 laradock 的本地开发环境上测试了相同的代码(软件版本会略有不同。仍然是 apache 2.4 和 php 7.2),我不能复制该问题,因此它不可能是客户端问题。

最佳答案

我们遇到了同样的问题,并通过这个问题解决了。 然而,没有必要完全禁用该模块。 该问题是由 Apache 2.4.39 中的这个错误引起的:

https://bz.apache.org/bugzilla/show_bug.cgi?id=63325

按照错误报告中的建议,您可以在 Apache 配置文件中显式设置默认值。

关于php - Apache 2.4 + PHP 7.2 prefork mpm + 文件上传导致20秒后部分上传错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55602997/

相关文章:

php - 使用 php 和 html 打开 outlook 新邮件

php - 删除时从 MySQL 数据库实时选择/显示/重新加载数据

apache - 如何在 Apache 服务 Plone 中正确设置 Documentroot

python - Flask 上传照片类

android - 如何将文件附加到 Android 中的帖子 url

java - 用java发送文件到客户端

php - HTML5 Websocket 仅适用于本地主机

php - 如何防止 WordPress 在 WYSIWYG 编辑器中向元素添加额外的类

Apache 2 Windows 旋转日志帮助

python - 从 python cgi 访问数据库