【问题标题】:How to upload large files above 500MB in PHP [duplicate]如何在 PHP 中上传 500MB 以上的大文件 [重复]
【发布时间】:2013-04-12 17:45:34
【问题描述】:

我用PHP做了一个上传页面,但是不知道为什么页面上传不了大于500MB的文件,这是我第一次尝试上传这么大的东西,我改变了PHP.INI中的所有配置( post_max_size = 700M,upload_max_filesize = 600M,max_execution_time = 300)。上传代码如下

if(isset($_FILES['upload']) && !empty($_FILES['upload']['name'])){
 move_uploaded_file($_FILES['upload']['tmp_name'], $this->filePath.$this->fileName);
}

我需要帮助,我想知道是不是有什么地方做得不对..

【问题讨论】:

  • 您的服务器错误日志中有哪些错误?
  • @all,对不起,我的服务器宕机了,返回的错误是未定义的索引名称,好像文件上传输入字段不存在,或者有时它说执行超时,这让我很沮丧
  • 执行超时在move_uploaded_file 上是有意义的,因为它执行了复制操作。至于超时,不用担心 - 向服务器传输数据包含在超时中。当 PHP 启动时,您的请求已经到达。

标签: php


【解决方案1】:

您认为增加上传大小限制是否会解决问题?如果上传 2GB 文件,那会发生什么?你考虑过这样一个脚本的内存使用吗?

相反,您需要的是分块上传,请参见此处:Handling plupload's chunked uploads on the server-side 在这里:File uploads; How to utilize "chunking"?

【讨论】:

  • +1。这将是要走的路。 HTTP 发布大文件非常不可靠。
  • @Jean - 我知道,我在自己的皮肤上感觉到了。
【解决方案2】:

通过配置,PHP 只允许上传不超过一定大小的文件。网上有很多文章解释了如何修改这个限制。以下是其中的一些:

例如,您可以编辑您的php.ini 文件并设置:

memory_limit = 32M
upload_max_filesize = 24M
post_max_size = 32M

然后您需要重新启动 apache。

注意:
话虽如此,上传这样的大文件并不是很可靠。可能会发生错误。您可能想要拆分文件,并包含一些附加数据以进行错误更正。一种方法是使用par recovery files。然后,您可以在类 unix 系统上使用 par command line utility 上传后检查文件。

【讨论】:

    【解决方案3】:

    我假设您的意思是通过 HTTP 传输文件。 虽然不如 FTP 糟糕,但如果 你可以找到另一个解决问题的方法。 HTTP(以及因此的组件程序)针对在 Internet 上传输相对较小的文件进行了优化。

    虽然协议支持服务器到客户端的范围请求, 它不允许反向操作。即使任一端的软件都不受卷的影响,您推送的数据越多 您可能失去连接的时间间隔越大。 但最大的问题是最后一句中的警告。

    【讨论】:

      猜你喜欢
      • 2011-07-06
      • 2012-03-29
      • 2011-04-09
      • 1970-01-01
      • 2012-08-05
      • 1970-01-01
      • 2017-08-17
      • 1970-01-01
      • 2011-09-13
      相关资源
      最近更新 更多