使用PHP中的分块上传1GB文件

时间:2010-03-15 14:32:48

标签: php upload large-files

我有一个Web应用程序,可以接受最多4 MB的文件上传。服务器端脚本是PHP,Web服务器是NGINX。许多用户要求大幅增加此限制以允许上传视频等。

然而,PHP的这个问题似乎没有简单的解决方案。首先,在客户端,我正在寻找允许我在传输过程中块文件的东西。 SWFUpload似乎没有这样做。我想我可以使用Java FX(http://blogs.oracle.com/rakeshmenonp/entry/javafx_upload_file)流上传,但我在PHP中找不到任何等效的request.getInputStream。

增加浏览器client_post限制或php.ini上传或max_execution次并不是真正大文件(~1GB)的真正解决方案,因为浏览器可能会超时并想到存储在内存中的所有blob。 / p>

有没有办法在服务器端使用PHP解决这个问题?我很感激您的回复。

8 个答案:

答案 0 :(得分:11)

plupload是一个javascript / php库,它非常易于使用并允许分块。

它使用HTML5。

答案 1 :(得分:3)

“但我在PHP中找不到任何等效的request.getInputStream。”

或许

fopen('php://input');

答案 2 :(得分:3)

答案 3 :(得分:2)

尝试使用bigupload脚本。它非常易于集成,并且可以上传最多2 Gb的块。块大小可自定义。

答案 4 :(得分:1)

查看tus protocol这是一个基于HTTP协议的可恢复文件上传,这样您就可以继续停下的地方,而不会在发生任何中断时重新上传整个数据。该协议自2017年5月起一直adopted by vimeo

您可以使用不同语言here找到协议的各种实现。在您的情况下,您可以使用名为uppy的javascript客户端,并在服务器中使用基于golangphp的服务器实现。

答案 5 :(得分:0)

如何使用java applet进行上传和PHP处理..

您可以在此处找到Jupload的示例: http://sourceforge.net/apps/mediawiki/jupload/index.php?title=PHP_Example

答案 6 :(得分:0)

您可以使用this package

它支持断点续传。

examples / js-examples / resumable-chunk-upload 示例中,您可以关闭并重新打开浏览器,然后恢复未完成的上传。

答案 7 :(得分:-2)

您绝对可以编写一个接受数据块的Web应用程序(甚至通过POST),然后将该数据块附加到文件中。在我看来,你需要某种客户端应用程序,它将获取文件并将其分解为块,然后一次将其发送到您的Web服务一个块。但是,创建一个sftp目录似乎要容易得多,并且让客户端使用一些预先存在的客户端应用程序来获取文件。