Загружайте файлы размером 1 ГБ, используя чанкинг в PHP - PullRequest
37 голосов
/ 15 марта 2010

У меня есть веб-приложение, которое принимает файлы размером до 4 МБ. Серверный скрипт - это PHP, а веб-сервер - NGINX. Многие пользователи просили резко увеличить этот лимит, чтобы разрешить загрузку видео и т. Д.

Однако, похоже, не существует простого решения этой проблемы с PHP. Во-первых, на стороне клиента я ищу что-то, что позволило бы мне разбивать файлы на части во время передачи. SWFUpload, похоже, не делает этого. Я предполагаю, что я могу передавать потоковое видео с использованием Java FX (http://blogs.oracle.com/rakeshmenonp/entry/javafx_upload_file), но я не могу найти эквивалента request.getInputStream в PHP.

Увеличение ограничений браузера client_post или загрузка php.ini или max_execution раз на самом деле не является решением для действительно больших файлов (~ 1 ГБ), потому что, возможно, браузер прекратит работу и подумает обо всех этих BLOB-объектах, хранящихся в памяти.

Есть ли способ решить эту проблему с помощью PHP на стороне сервера? Буду признателен за ваши ответы.

Ответы [ 8 ]

11 голосов
/ 08 августа 2012

plupload - это библиотека javascript / php, и она довольно проста в использовании и позволяет выполнять чанкинг.

Хотя использует HTML5.

3 голосов
/ 24 июля 2010

Я создал клиент JavaFX для отправки больших файлов кусками с максимальным размером сообщения (я использую 2 МБ) и скрипт получателя PHP для сборки кусков в исходный файл. Я выпускаю код под лицензией Apache здесь: http://code.google.com/p/gigaupload/ Не стесняйтесь использовать / модифицировать / распространять.

3 голосов
/ 17 марта 2010

"но я не могу найти эквивалента request.getInputStream в PHP."

fopen('php://input'); возможно?

2 голосов
/ 19 февраля 2017

Попробуйте использовать скрипт bigupload. Это очень легко интегрировать и может загружать до 2 Гб порциями. Размер чанка настраивается.

1 голос
/ 18 января 2018

Взгляните на tus protocol , который является протоколом на основе HTTP для возобновляемых загрузок файлов, так что вы можете продолжить с того места, на котором остановились, без повторной загрузки целых данных снова в случае каких-либо прерываний. Этот протокол был также принят vimeo с мая 2017 года.

Вы можете найти различные реализации протокола на разных языках здесь . В вашем случае вы можете использовать его клиент javascript с именем uppy и использовать реализацию сервера на основе golang или php на сервере.

0 голосов
/ 17 сентября 2018

вы можете использовать этот пакет

поддерживает возобновляемую загрузку чанка.

в примере examples / js-examples / resumable-chunk-upload можно закрыть и снова открыть браузер, а затем возобновить незавершенные загрузки.

0 голосов
/ 18 марта 2010

Как насчет использования Java-апплета для загрузки и PHP для обработки ..

Вы можете найти пример здесь для Jupload: http://sourceforge.net/apps/mediawiki/jupload/index.php?title=PHP_Example

0 голосов
/ 15 марта 2010

Вы определенно можете написать веб-приложение, которое будет принимать блок данных (даже через POST), а затем добавлять этот блок данных в файл. Мне кажется, что вам нужно какое-то клиентское приложение, которое будет брать файл и разбивать его на куски, а затем отправлять в веб-службу по одному фрагменту за раз. Тем не менее, кажется, что создать каталог sftp намного проще, и клиенты могут просто закачивать файлы с помощью уже существующего клиентского приложения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...