我一直在尝试发现我的网络服务器上的一个问题,该问题会导致文件上传失败。我还创建了一个简单的 php 脚本来测试上传,上传失败时,我没有收到任何错误或日志消息。我测试的文件有 86mb,我已经增加了与上传相关的以下 php 设置并重新启动了 apache:
memory_limit 1024MB
post_max_size 512MB
upload_max_filesize 256MB
无论我做了什么更改,问题仍然存在,上传仅适用于小文件。我使用的是 php7.3、apache 2.4.39 和 CentOS 7.6。
我进行的另一项测试是更改upload_tmp_dir
为自定义文件夹,并且我能够检查在文件上传时是否创建了临时文件,直到它以某种方式失败并且文件被删除。还尝试禁用 SELinux,但结果是一样的。
答案1
检查你的 Apache 配置中的指令LimitRequestBody
。默认情况下,此值为 0,允许无限制的上传大小,但可能已自定义。Apache 和 PHP 配置中的上传大小限制必须足够。
答案2
该问题是由 引起的reqtimeout_module
,添加以下代码即可/etc/httpd/conf/httpd.conf
解决问题。
<IfModule reqtimeout_module>
RequestReadTimeout header=20-40,MinRate=500 body=20,MinRate=500
</IfModule>