大型上传的php设置(413错误)

时间:2015-02-18 22:00:48

标签: php dropbox-api ini http-status-code-413

使用Dropzone.js和Dropbox API,我希望设置一个可以接受高达10G文件的拖放式网页界面。它与高达约50M的文件完美配合,但在此之后失败,出现413 Request Entity Too Large错误。我尝试过的示例文件是1.5G。我已经尝试了我所知道的更改大文件上传,但似乎仍然无法正常工作。我希望有人可以通过查看我的PHP设置指出我正确的方向。

以下是相关phpinfo()http://codepen.io/jboneca/pen/bNvEwV

的呈现

其他信息:

  • 我们的服务器上没有存储任何文件。它(在大多数情况下成功)直接上传到Dropbox。
  • Dropzone已禁用文件大小限制。
  • 以下设置已更改,但无效。upload_max_filesizepost_max_sizemax_execution_timemax_input_timememory_limit。也许他们需要更大?

1 个答案:

答案 0 :(得分:2)

有几点需要注意:

  1. 当您使用php处理文件上传时,即使您的脚本最终没有保存文件但仅将其发送到Dropbox API - 它的工作方式是php必须将其写入服务器上的临时位置,例如的/ tmp / tempfilename。因此,您的服务器必须有足够的空间来存储文件,即使它只是暂时的。然后,您的脚本通过Dropbox API上传文件,PHP将自动从临时位置清除/删除文件。
  2. 当post_max_size不足以处理您的请求时,通常会发生413 Request Entity Too Large错误,但在您的情况下,您可能还有其他问题限制它。
  3. 根据我运行处理大量数据的命令行php脚本的经验,php内存限制开始突破1700M-2000M。这意味着,即使将memory_limit设置为更高的值,php本身也无法处理大的内存限制,并且当内存使用量超过1800M左右时会失败。 (也许它使用带符号的32位int作为内存限制?不确定。)
  4. 我也使用了Dropzone.js + php文件上传的组合,并且没有上传几百MB文件的问题。我建议你试试这个:将upload_max_filesize设置为1100M,将post_max_size设置为1200M,并将memory_limit设置为1700M。现在,首先尝试100mb,然后500mb,然后1gb的文件。我相信它适用于所有这些尺寸。现在调整每个设置,看看你有多接近1.5gb。这可能是您拥有的当前php版本和服务器的限制。
  5. 仅供参考,如果您的错误是413请求实体太大,则max_execution_time不是您的问题。 (你甚至还没有)这只是执行php脚本中所有行所需的时间。 (如果您在本地将文件保存在服务器上,即使您上传1GB文件,此时间也会以毫秒为单位。)但是,由于您需要从服务器将此文件发送到Dropbox API,因此您的请求可能需要太长且超过max_execution_time限制。我相信在您解决上传的当前问题后,您将遇到此问题。为了解决这个问题,我建议你的http请求处理php脚本,只需将文件添加到某个队列,并有一个单独的消费者进程从队列中读取并将文件上传到Dropbox。 (也可能为用户提供更好的用户体验,因此他们不必等待2倍)
相关问题