使用 PHP 的大文件上传错误

Posted

技术标签:

【中文标题】使用 PHP 的大文件上传错误【英文标题】:Large File Upload Errors with PHP 【发布时间】:2010-10-19 22:01:14 【问题描述】:

我有一张幻灯片的图片上传,用户不断上传超过 2MB 的文件。小于此大小的文件可以正常工作,但大于此大小的文件会导致浏览器超时。

这是我的 php ini 设置:

最大内存分配:12M 最大文件上传大小:10M 最大 HTTP 帖子大小:10M 最大执行时间:60 最大输入解析时间:120

这些设置在配置文件本身,我可以直接更改。使用 phpinfo() 时会显示更改。

我在 apache 服务器和 php 4.3.9 上运行(客户的选择,不是我的)。 apache 服务器的请求限制设置为默认值,我相信它在 2GB 左右?

当我使用 firebug 网络监视器时,我确实没有收到来自服务器的完整响应,尽管我在使用此工具方面没有太多经验。事情似乎在 43 秒左右超时。

我在网上找到的所有帮助都将上述设置作为罪魁祸首,但所有这些设置都远高于这个 2MB 文件和 43 秒超时。

有什么建议可以从这里解决这个问题吗?

这里是来自 phpinfo() 的相关 php ini 设置。如果我需要再发帖,请告诉我。

file_uploads 开启 开启 max_execution_time 60 60 max_input_nesting_level 64 64 max_input_time 120 120 memory_limit 12M 12M post_max_size 10M 10M safe_mode 关 关 upload_max_filesize 10M 10M upload_tmp_dir 没有值没有值

【问题讨论】:

【参考方案1】:

确保您在 php.ini 中激活了错误报告:display_errors = On;这可能会给你一个关于发生了什么的线索。生产服务器通常(应该)禁用错误报告。

我最近遇到了类似的问题,增加 memory_limit 设置对我有用。如果您将文件内容读入变量,每个变量将占用与文件大小一样多的内存,从而增加脚本的内存需求。

【讨论】:

这正是我发现的。我决定看看这个区域,因为上传设置看起来都很好。我尝试增加内存分配,它奏效了!我肯定跑错了路。即使 display_errors = ON,它也没有显示错误。【参考方案2】:

这些设置在哪里?如果您使用的是.htaccess,那么您的 Apache 配置可能不允许您覆盖这些设置。

如果确实应用了这些设置,我建议使用 phpinfo() 调用进行检查:

<?php
  phpinfo();
?>

【讨论】:

我有能力在这个特定的服务器上编辑 php ini 文件,它们出现在 php info 中。这就是为什么这个特殊问题真的困扰我的原因之一。我告诉人们上传较小的文件没有问题,但我现在有一个有趣的问题要解决。 ;) 能否请您发布您的 PHP.ini 设置?我的意思是,只是那些影响文件上传的。 对不起,伙计,我只是没有任何线索:(祝你好运! 感谢您的帮助!我很欣赏快速反应。如果我得到这个工作,我会尝试发布答案。【参考方案3】:

如果是共享主机,您的主机可能设置了覆盖您的限制。

否则,请尝试使 POST 限制高于文件上传大小。 AFAIK,上传已发布。

【讨论】:

我刚刚将 POST 限制提高到 11M,超过文件上传大小 1M。我正在与文件一起发送一小段文本数据,最多约 30 个字符。不幸的是,一切都没有改变。【参考方案4】:

如果问题是由于主机覆盖了您的超时,您可以寻找仍然使用 Apache 1 的主机:在 Apache 1 中,即使超时,本地 .htaccess 也会覆盖全局设置。

否则,只需几美元就可以使用数十个 Java 小程序上传器(Google 搜索)。他们拆分文件,上传各个部分,然后透明地将各个部分重新组合在一起。

这是对超时的保证修复,并且具有让用户暂停和恢复上传、查看进度等的额外优势。

(基于 Flash 的上传者没有这个优势。)

【讨论】:

以上是关于使用 PHP 的大文件上传错误的主要内容,如果未能解决你的问题,请参考以下文章

使用.htaccess上传PHP中的大文件

如何从表单将 2GB+ 的大文件上传到 .NET Core API 控制器?

关于MVC4里面的大文件上传,该怎么解决

js+php大文件分片上传

Github如何上传超过100M的大文件

如何通过 Autodesk Forge 上的数据管理 API 上传超过 100MB 的大文件?