上传文件大小无法超过500MB,而upload_max_filesize设置为1G。

3

我知道这方面已经有很多问题了,但是我已经按照所有的问题进行了操作,却找不到任何关于如何进一步调试此问题的信息。

我可以完全上传一个 490 MB 的文件。但我无法上传 562.8 MB 的文件。

我正在运行 php 7.0.11 with fpm, nginx 1.11.3, ubuntu 16,并使用 Laravel 5.1

我的 php ini 设置如下:

upload_max_filesize 1GB

post_max_size 1GB

memory_limit 1GB (实际上并不需要,但我还是尝试了)

我的 nginx 设置为:

client_max_body_size 1G

我没有找到任何其他需要更改或可能干扰的变量的参考。

当我上传时,$_FILES 的样子是:

["file"]=>
  array(5) {
    ["name"]=> string(36) "CSBgGvDIAaZtbC4lmliLevHf0bAnWiKM.rar"
    ["type"]=> string(0) ""
    ["tmp_name"]=> string(0) ""
    ["error"]=> int(1)
    ["size"]=> int(0)
  }

我的nginx或php错误日志中没有任何内容。

$_SERVER['content_length']为652844444,这是文件的正确长度。

'error'被列为1。我不知道这是true还是相关错误消息中的1。php文档将1的错误消息列在文档中:

上传的文件超过了php.ini中的upload_max_filesize指令。

但以下两个条件都满足:

echo phpinfo();
echo ini_get('upload_max_filesize');

显示1GB,因此文件不应超过1GB,因为它只有562.8MB。

没有进一步的错误信息,并且我已经按照在Google上找到的每个指令和指南进行操作,但我完全不知道可能是什么问题。

我也在使用Cloudflare,但它已关闭此子域名的限制,而Cloudflare的限制是100MB而不是500MB,因此我认为这与Cloudflare无关。

是否有任何方法可以进一步调试?我现在完全不知所措。


根据此链接 http://php.net/manual/en/features.file-upload.errors.php,似乎您的PHP INI配置中有些东西没有生效。如果您正在使用PHP-FPM,则可能需要确保更改了正确的配置。在读取方面有点奇怪。 - apokryfos
1
那是我引用的内容吗?你能解释一下你的意思吗?如果我在同一页上使用ini_get('upload_max_filesize'),那么肯定是使用的php.ini设置。 - John Mellor
也许这是超时的问题?你是在本地主机上测试上传,还是在外部服务器上?你可以尝试这个链接:https://easyengine.io/tutorials/php/increase-script-execution-time/ - Marek Skiba
我猜问题更像是,ini_get 是否在处理上传的同一脚本中运行? - apokryfos
如果它超时了,我就无法进入php文件并能够var_dump($_FILES),对吧?据我所知,对于仍在处理php的文件,没有超时时间。 - John Mellor
是的,这是同一个脚本。它是 Laravel,所有内容都通过相同域上的相同 index.php 文件运行。我还刚刚检查了 ini_get() 和 var_dump($_FILES),它仍然显示 1GB。 - John Mellor
3个回答

1
所以我解决了这个问题。非常非常恼人。问题在于我在php.ini中输入了1GB而不是1G。没有错误消息,也不清楚它没有使用1千兆字节。但是php.ini不会识别像1KB、1MB或1GB这样的东西,必须不带B使用。

吸取教训,浪费了很多时间。


0

您是否正在使用云/托管服务器?许多托管服务器对最大文件上传限制有硬性限制,即使使用ini文件也无法覆盖。如果您正在使用托管服务器,则可能需要联系您的托管提供商为您覆盖限制。


这是一个带有Ubuntu 16的DigitalOcean droplet。我不认为有任何限制。谷歌没有找到任何相关信息。 - John Mellor

0

如果您正在使用 wp site 插件,请考虑更改 php.ini 中的两个常量(在 wp-config.php 更新后未生效,许多开发人员在 StackOverflow 上建议这样做)。在 Ubuntu 20 上执行此操作后可以解决问题。

位置

sudo nano /etc/php/7.4/apache2/php.ini

常量

post_max_size = 1G

upload_max_filesize = 1G

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接