Pull to refresh

PHP и Dropbox. Удаленное хранилище пользовательских файлов

Reading time 3 min
Views 15K

Применение


Довольно часто при разработке веб-приложений приходится задумываться над вопросом организации стабильного хранилища пользовательских файлов. И если при этом мы ограничены дисковым пространством, то создание обмена файлами средней тяжести, да еще и с резервным копированием оных, сильно нас озадачивает.

Решение


В качестве решения я предлагаю схему 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, чтобы использовать максимум возможностей интеграции.
Tags:
Hubs:
+70
Comments 26
Comments Comments 26

Articles