![]() |
Автоматическое копирование сайта и базы на яндекс дискЯ не буду тут распространяться о важности бэкапов – вы и так наверняка все знаете об этом. Единственно, что отдельно замечу, что не стоит целиком и полностью полагаться на хостера – то есть на его бэкапы. Всякие могут быть форс-мажоры, иногда на многие часы и даже дни выходит все оборудование провайдера – так что не помешает настроить и свою систему автоматического сохранения нужных данных. Этот код по копированию сайта и заливке файлов на яндекс диск будет полезен как минимум владельцам небольших ресурсов – блогов, магазинчиков и т.д. Итак, условно разобьем все на три этапа. Программирование можно сравнить с кубиками, так вот эти три этапа – это и есть наши кубики, из которых можно собрать программу. 1. Файлы на хостинге в архив Для того, чтобы обойти все файлы на хостинге в нужной папке, мы возьмем вот такую функцию function CustomZip($source, $destination) { if (!extension_loaded('zip') || !file_exists($source)) { return false; } $zip = new ZipArchive(); if (!$zip->open($destination, ZIPARCHIVE::CREATE)) { return false; } $source = str_replace('\\', '/', realpath($source)); if (is_dir($source) === true) { $files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($source), RecursiveIteratorIterator::SELF_FIRST); foreach ($files as $file) { $file = str_replace('\\', '/', $file); // Игнорируем "." и ".." папки if( in_array(substr($file, strrpos($file, '/')+1), array('.', '..')) ) continue; $file = realpath($file); if (is_dir($file) === true) { $zip->addEmptyDir(str_replace($source . '/', '', $file . '/')); } else if (is_file($file) === true) { $zip->addFromString(str_replace($source . '/', '', $file), file_get_contents($file)); } } } else if (is_file($source) === true) { $zip->addFromString(basename($source), file_get_contents($source)); } return $zip->close(); }Используем очень просто: CustomZip($src_dir, $fileName);2. Дамп базы данных в архив Так как очень часто у сайта имеется база данных, то и для неё необходимо создавать резервные копии периодически. Здесь есть два способа. Первый это использовать функцию shell_exec shell_exec('mysqldump --user=root --password=pass --host=localhost name_bd | gzip > /var/www/html/'.$file);тут мы сразу же сжимаем базу. Таким способом обычно можно создавать бэкапы даже на виртуальных (шаред) хостинга. Если не получается, то надо будет идти по другому пути – проходить по всем таблицам и копировать их с помощью PHP – это уже отдельная тема, в данном материале мы её разбирать не будем. 3. Заливка на яндекс диск Перед тем, как непосредственно заливать, надо создать приложение ![]() и дать доступ ему к вашему яндекс диску. Затем получить токен. https://oauth.yandex.ru/authorize?response_type=token&client_id=идентификатор_приложенияИ уже зная токен несложно набросать код, заливающий копию вашего сайта на яндекс диск $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 'Файл успешно загружен.'; } } else{ echo $res['error']; }Вот, собственно и все. Это основные блоки. Что еще надо иметь в виду
![]() Автор этого материала - я - Пахолков Юрий. Я оказываю услуги по написанию программ на языках Java, C++, C# (а также консультирую по ним) и созданию сайтов. Работаю с сайтами на CMS OpenCart, WordPress, ModX и самописными. Кроме этого, работаю напрямую с JavaScript, PHP, CSS, HTML - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда. ![]() |
Мои услуги
|
© upread.ru 2013-2023 При перепечатке активная ссылка на сайт обязательна. |