Многие популярные CMS, как с открытым исходным кодом, так и коммерческие, имеют в своем составе модули бэкапа. Но проблема в том, что чаще всего эти модули делаются по остаточному принципу, и весьма примитивны, не учитывают многих тонкостей создания дампа. Также чаще всего эти модули банально никто не тестируют на большие объемы (прогнали его на тестовой полупустой БД и рады).
В отличии от подобных модулей, Sypex Dumper является скриптом заточенным исключительно на бэкап и восстановление MySQL. И без проблем работающий с базами даже в несколько гигабайт. Но, кроме того, что дампер работает, как отдельное приложение, в нем была предусмотрена возможность встраивать его в сторонний софт.
В данной статье я расскажу, как быстро и довольно просто встроить Sypex Dumper в административную панель своей CMS (форума, блога и т.п.). А также рассмотрим некоторые недокументированные возможности такой интеграции.
Вступление
Для встраивания дампера, я рекомендую следующую схему:
- Создание в вашей админке страницы на которой будет расположен iframe, в который будет загружаться дампер.
- Создание файла авторизации для дампера, который будет использовать авторизацию вашей CMS.
У данной схемы есть следующие преимущества, по сравнению с привычным подключением модуля бэкапа с помощью include в свою систему:
- Меньше затрат времени (не нужно вписывать дампер в свой интерфейс, да и у дампера не совсем стандартная схема работы).
- Дампер может работать, как в админке, так и самостоятельно (что полезно, когда по каким-либо причинам в админку зайти нельзя).
Файл авторизации
Файл авторизации представляет собой небольшой скрипт, единственная задача которого проверить есть у пользователя права доступа к дамперу. В дампере используются, так называемые, цепочки авторизации. В которых указывается, какие файлы авторизации использовать и в какой последовательности. Разберем файл авторизации на примере недавно созданной интеграции в ImageCMS.
Название файла состоит из префикса «auth_», названия авторизации (состоящее из английских букв, цифр и знака подчеркивания) и расширения «php».
Файл авторизации должен содержать набор инструкций, который в случае положительной авторизации пользователя, должен установить значение переменной $auth в true (либо 1). Также в файле авторизации можно менять любые свойства из конфиг-файла (в дальнейшем они попадут в виртуальный конфиг). Доступ к свойствам конфиг-файла через массив $this->CFG.
<?php
// Sypex Dumper 2 authorization file for ImageCMS 3
session_start();
if(!empty($_SESSION['DX_permission']['backup_create'])){
define('BASEPATH', 1);
include '../application/config/config.php';
if($this->connect($db['default']['hostname'], '', $db['default']['username'], $db['default']['password'])){
$this->CFG['my_db'] = $db['default']['database'];
$this->CFG['exitURL'] = '../admin/logout';
$auth = 1;
}
}
?>
В ImageCMS для авторизации используются стандартные сессии, поэтому в начале скрипта создаем сессию, и получаем данные о пользователе. Для того чтобы проверить права доступа в этой CMS используем родное свойство 'backup_create', если оно истинно значит пользователь может пользоваться дампером.
Дальше подключаем конфиг-файл CMS-ки, чтобы достать оттуда данные для подключения к MySQL. И с помощью $this->connect() подключаемся к MySQL, в случае успеха запоминаем базу к которой будет доступ в дампере, и настраиваем 'exitURL' – адрес по которому будет переходить дампер при нажатии кнопки выхода. Ну и главное $auth присваиваем 1, говорящую о том, что авторизация успешна.
После этого нужно будет добавить имя файла авторизации в цепочку авторизации. Это можно сделать в интерфейсе дампера Опции -> Цепочка авторизации, либо в cfg.php в строке
'auth' => ‘mysql cfg',
Теперь если вы залогинены в CMS, и у вас есть право создавать бэкапы, то для входа в дампер дополнительная авторизация не понадобится.
Интеграция в интерфейс
Осталось только встроить дампер в админку CMS. Для чего на нужную страницу админки нужно вставить строку:
<iframe src="/sxd/" width="586" height="462" frameborder="0" style="margin:0;"></iframe>
где в src подставить адрес дампера (относительный или полный).
Недокументированные возможности
Поскольку в Sypex Dumper интерфейс работает полностью на JS, то мы можем довольно просто выполнять любые функции дампера из своей CMS, как с помощью кнопок так и автоматически.
К примеру для создания бэкапа нужно выполнить команду (предварительно в iframe добавив id=sxdframe):
sxdframe.sxd.runBackup();
Или такой вариант:
// Открываем вкладку импорта
sxdframe.sxd.actions.tab_restore();
// Выбираем базу test1
sxdframe.sxd.combos.restore_db.select('test1');
// Выбираем файл
sxdframe.sxd.combos.restore_file.select('test1_2012-11-17_10-02-34.sql.gz');
// Восстановить дамп
sxdframe.sxd.runRestore();
В связи с подготовкой третьей версии дампера, интересует насколько востребован подобный JS API для него. Также принимаются пожелания по тому, что еще добавить в дампер. И конечно, если возникли какие-то сложности по интеграции, можете смело задавать вопросы.
В документации разбираются еще несколько файлов авторизации Sypex Dumper.
Кроме того вы можете скачать готовые файлы интеграции для следующих популярных систем: Drupal, ImageCMS, IPBoard, Joomla, MODx, phpBB, PHP-Fusion, vBulletin, WordPress, XenForo.
Автор: zapimir