В прошлой статье я показал, как делать настройку приложения для работы с Яндекс.API и сейчас покажу как создать папку на Яндекс.Диске и перенести наш архив с бэкапом 1С Битрикс в облако.
Для чего может понадобится перенос бэкапов на Яндекс.Диск?
Можно пользоваться архивами непосредственно на сайте, однако что если хостинг не позволяет складировать большой объем файлов, ведь средний объем хостинга - 20 Гб, которого может не хватить при постоянных наработках. Иными словами для чего эта возня.1С Битрикс при валидной и активной лицензии предоставляет место под файлы на своем хостинге, но у моего клиента к примеру этого места хватает только на 3 архива, хостинг так же позволяет держать 4 архива, но в процессе разработки клиент захотел, чтобы резервные копии создавались каждую неделю и хранились год.
Простой вариант - приобретение внешнего жесткого диска и ручное скачивание файлов без всяких гарантий, как показала практика даже при перекачке архива с хостинга на компьютер заказчика на выходе я получал 3 битый архива из пяти. Как это получалось у клиента - вопрос...
Схема работы по созданию бэкапов 1С Битрикс на Яндекс.Диск
1. Создание новой папки на Яндекс.Диске
Так как название папки с бэкапом должно быть простым и понятным я решил называть их по дате. т.е. названия папки получились такими 04_07_2019 название генерируется функцией php.
$newdir = date("d_m_Y");
2. Получение списка файлов на хостинге (список файлов бэкапа)
Так же используется стандартная функция php
$file = readdir($handle), где в переменной handle находится указание на каталог, в котором лежит архив
У меня он выглядит так : /home/s/client/live/public_html/bitrix/backup
3. Передача нужных файлов хостинга в облако Яндекс.Диска
<?
$token = 'token';
$dir = "/home/s/client/live/public_html/bitrix/backup"; // системный путь к папке с бэкапом
$newdir = date("d_m_Y");
$path = $newdir;
$ch = curl_init('https://cloud-api.yandex.net/v1/disk/resources/?path=' . urlencode($path));
curl_setopt($ch, CURLOPT_PUT, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Authorization: OAuth ' . $token));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_HEADER, false);
$res = curl_exec($ch);
curl_close($ch);
$res = json_decode($res, true);
$path = $path.'/'; // добавляем обратный слэш иначе все файлы будут копироваться в яндекс.Диске в корне
if($handle = opendir($dir)){
while(false !== ($file = readdir($handle))) {
if($file != "." && $file != ".."){
// начало загрузки
// Запрашиваем URL для загрузки.
$ch = curl_init('https://cloud-api.yandex.net/v1/disk/resources/upload?path=' . urlencode($path . basename($file)));
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Authorization: OAuth ' . $token));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_HEADER, false);
$res = curl_exec($ch);
curl_close($ch);
$res = json_decode($res, true);
if (empty($res['error'])) {
// Если ошибки нет, то отправляем файл на полученный URL.
$fp = fopen($file, 'r');
$ch = curl_init($res['href']);
curl_setopt($ch, CURLOPT_PUT, true);
curl_setopt($ch, CURLOPT_UPLOAD, true);
curl_setopt($ch, CURLOPT_INFILESIZE, filesize($file));
curl_setopt($ch, CURLOPT_INFILE, $fp);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_exec($ch);
$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($http_code == 201) {
echo 'Файл ' . $file .'успешно загружен.<br>'; // печатаем в браузере какой файл загружен на Яндекс.Диск
}
}
// конец загрузки
}
}
}
?>
Готовый пример для создания архивов Битрикс на Яндекс.Диске
Данный пример был написан на коленке и по хорошему его нужно оптимизировать, однако со своей задачей он вполне справляется и позволяет переносить бэкап Битриса в папки Яндекс.ДискаСкачать готовый пример вы можете по ссылке ниже