使用 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 的大文件上传错误的主要内容,如果未能解决你的问题,请参考以下文章