загрузить большой файл в облако с помощью php

Я пытаюсь загрузить большие файлы в облако с помощью Compass API: http://www.compasswebpublisher.com/php/rackspace-cloudfiles-php-api

Он отлично работает с небольшими файлами (jpg), но когда файл превышает 100 МБ, происходит сбой сценария. Ну, если быть точным, скрипт просто останавливается.

$cf = new Compass_Service_Rackspace_Cloudfiles('myid', 'myApiKey', Compass_Service_Rackspace_Cloudfiles::UK_AUTHURL);
$cf->auth();
set_time_limit(60*60);
ini_set("memory_limit","256M");
ini_set('upload_max_filesize', '700M');
ini_set('post_max_size', '700M');
$contents = file_get_contents($path);
$cf->putObject('container/filename', $contents);

В первый раз я думал, что это проблема с памятью, но даже с 256M скрипт не работает.

Любая идея, почему это не работает?

Большое спасибо!

С уважением, Пв.


person pvledoux    schedule 03.02.2011    source источник
comment
Убедитесь, что время ожидания не истекло, установив set_time_limit(0);   -  person Tjorriemorrie    schedule 04.02.2011


Ответы (3)


Я не уверен, какой сценарий вы пытаетесь использовать, но, вероятно, он дает сбой из-за истечения срока действия сценария, если о нем не позаботятся.

Я бы не советовал вам использовать форму для регулярной загрузки файла размером 100 МБ, если только это не является абсолютно необходимым, и сценарий написан так, чтобы справляться с ограничениями. Вот для чего нужен FTP.

person user183037    schedule 03.02.2011
comment
@gazarsgo: Если бы я хотел заменить FTP безопасным решением, я бы выбрал SFTP FWIW. Но это просто педантично, когда ОП загружает файлы через веб-форму. Тем не менее, я согласен, что SFTP был бы более подходящим. - person user183037; 04.06.2012

В качестве первого решения я бы порекомендовал вам передать функцию 0 set_time_limit, потому что это позволит скрипту работать до конца без тайм-аута.

В качестве второго решения я бы порекомендовал вам использовать библиотеку plupload для внешнего интерфейса, которая позволит вам загружать файлы по частям. Подробнее об этом читайте здесь http://www.plupload.com/

person Eugene Manuilov    schedule 03.06.2012

Вы можете использовать облачный API raskcpace для отправки файлов в облачные файлы в хранилище.

Рабочий процесс для загрузки файлов будет

  1. Сначала загрузите файлы на свой сервер.
  2. Отправьте файл в облачный файловый контейнер Rackspace с веб-сервера.
  3. Удалите файл со своего веб-сервера или оставьте его на свой выбор.

Вы можете использовать поток PHP input:// и XMLHttpRequest для загрузки файлов фрагментами на ваш веб-сервер. Подробнее здесь http://www.webiny.com/blog/2012/05/07/webiny-file-upload-with-html5-and-ajax-using-php-streams/

Вы можете найти Rackspace API по адресу https://github.com/rackspace/php-opencloud.

person Krishan Gopal    schedule 10.09.2013