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

php settings for large uploads (413 error)

使用 Dropzone.js 和 Dropbox API,我希望设置一个可以接受最大 10G 文件的拖放式 Web 界面。它可以完美处理高达 ~50M 的文件,但之后会出现 413 Request Entity Too Large 错误。我一直在尝试的示例文件是 1.5G。我已经尝试了我所知道的针对大文件上传的更改,但似乎仍然没有用。我希望有人可以通过查看我的 PHP 设置为我指明正确的方向。

这是关联的 phpinfo() 的效果图:http://codepen.io/jboneca/pen/bNvEwV

附加信息:

注意几点:

  1. 当您使用 php 处理文件上传时,即使您的脚本最终没有保存文件而只是将其发送到 Dropbox API -- 它的工作方式是 php 必须将其写入服务器上的临时位置,例如/tmp/tempfilename。因此,您的服务器必须有足够的 space 来存储文件,即使它只是临时文件。然后,您的脚本通过 Dropbox API 上传文件,PHP 将自动从临时位置清除 up/remove 文件。
  2. 413 请求实体太大错误通常发生在 post_max_size 不足以处理您的请求时,但在您的情况下,您可能还有其他限制它的问题。
  3. 根据我的 运行ning 命令行 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 倍的时间)