Применение
Довольно часто при разработке веб-приложений приходится задумываться над вопросом организации стабильного хранилища пользовательских файлов. И если при этом мы ограничены дисковым пространством, то создание обмена файлами средней тяжести, да еще и с резервным копированием оных, сильно нас озадачивает.
Решение
В качестве решения я предлагаю схему PHP<->Dropbox. Dropbox нам интересен тем, что каждому новому пользователю выделяеся 2Gb виртуального дискового пространства, а так же возможность отката на предыдущие версии файлов. Это обеспечивает нам стабильное хранилище, в котором не возникнет случаев безвозвратно удаленных файлов.
Настройка
Подготовка
Для начала нам необходимо добавить в PHP библиотеку Oauth:
sudo pecl install oauth
Если возникает ошибка при компиляции, то ставим девелоперскую версию PECL:
sudo apt-get install libpcre3-dev
Затем добавляем в php.ini:
extension=oauth.so
Установка
Для дальнейшей работы нам необходимо скачать библиотеку для работы с Dropbox на PHP. После загрузки распаковываем из архива папку Dropbox в каталог скриптов нашего приложения, рядом расположите файлы из папки examples. На этих примерах я покажу, как можно:
- создавать новый аккаунт Dropbox
- загружать файлы в аккаунт Dropbox
- получать эти файлы
- удалять файлы
Работа
Сразу предупрежу, что для работы нам необходим аккаунт на Dropbox, через который мы зарегистрируем свое новое приложение и получим для него ключи. Зарегистрироваться можно на сайте Dropbox. После регистрации посетите раздел для разработчиков и добавьте свое новое приложение. Вы получите App keys (Key и Secret), которые позволят нашему приложению работать с Dropbox.
Создание пользователя
Теперь откройте файл createaccount.php, который вы распаковали рядом с папкой Dropbox. Задайте значения для переменных consumerKey и consumerSecret:
$consumerKey = ''; // ваш Key, выданный Dropbox
$consumerSecret = ''; // ваш Secret, выданный Dropbox
Теперь установите необходимые параметры функции createAccount():
var_dump($dropbox->createAccount('mrhandsome@example.org','Mr','Handsome','password goes here'));
Запустите этот скрипт и, тем самым, вы создадите новый аккаунт на Dropbox (например для нового пользователя вашего сайта).
Загрузка файла на Dropbox
Теперь для загрузки файла в хранилище созданного пользователя необходимо создать новый скрипт:
<?php
$consumerKey = ''; // ваш Key, выданный Dropbox
$consumerSecret = ''; // ваш Secret, выданный Dropbox
include 'Dropbox/autoload.php';
$oauth = new Dropbox_OAuth_PHP($consumerKey, $consumerSecret);
$dropbox = new Dropbox_API($oauth);
// Авторизация
$tokens = $dropbox->getToken('mrhandsome@example.org', 'secretpassword');
$oauth->setToken($tokens);
$h = fopen('/local/path/to/file','r'); // открываем загружаемый файл
$dropbox->putFile('newPath.txt',$h); // загружаем
?>
Скачивание файла с Dropbox
Для скачивания файла создадим скрипт с таким же содержанием, но вместо функции putFile() мы используем getFile();
echo( $dropbox->getFile('newPath.txt') );
Удаление файлов на Dropbox
Для удаления по-аналогии используем delete();
$dropbox->delete('newPath.txt');
Статистика по аккаунту
Для контроля за свободным местом на Dropbox используйте следующее:
var_dump($dropbox->getAccountInfo());
Этот метод выдает статистику по пользователю и по занятому дисковому пространству. Думаю, что 2Gb под личные файлы пользователя — вполне достаточно, но если все-таки он его заполнит, то можно предупреждать пользователя о том, что скоро ему придется что-то удалить.
Заключение
В заключении хочу добавить, что я перечислил только самые основные функции. Рекомендую ознакомиться с API Dropbox для PHP, чтобы использовать максимум возможностей интеграции.