- <?php 
- set_time_limit(0); // Убираем ограничение на максимальное время работы скрипта 
- /* Массив с именами баз данных (имя базы данных можно посмотреть в phpMyAdmin) */ 
- $db_names[] = "db1"; 
- $db_names[] = "db2"; 
-   
- /* Массив с именами директорий, в которых лежат все файлы сайта */ 
- /* ВАЖНО: Все пути должны быть физическими и идти от корня сервера. Точный физический путь можно посмотреть через phpinfo() */ 
- $source_dirs[] = "/home/mysite1.ru"; 
- $source_dirs[] = "/home/mysite2.ru"; 
-   
- $offset_dirs = strlen("/home/"); // Служебная переменная, служащая для устранения лишних папок в архиве 
-   
- /* Параметры подключения к базе данных */ 
- $host = "localhost"; 
- $user = "root"; 
- $password = ""; 
-   
- $dump_dir = "/home/backup"; // Директория, куда будут помещаться архивы 
- $delay_delete = 35 * 24 * 3600; // Время в секундах, через которое архивы будут удаляться 
- $filezip = "backup_".date("Y-m-d").".zip"; // Имя архива 
-   
- deleteOldArchive(); // Удаляем все старые архивы 
-   
- if (file_exists($dump_dir."/".$filezip)) exit; // Если архив с таким именем уже есть, то заканчиваем скрипт 
-   
- $db_files = array(); // Массив, куда будут помещаться файлы с дампом баз данных 
-   
- for ($i = 0; $i < count($db_names); $i++) { 
- $filename = $db_names[$i].".sql"; // Имя файла с дампом базы данных 
- $db_files[] = $dump_dir."/".$filename; // Помещаем файл в массив 
- $fp = fopen($dump_dir."/".$filename, "a"); // Открываем файл 
- $db = new mysqli($host, $user, $password, $db_names[$i]); // Соединяемся с базой данных 
- $db->query("SET NAMES 'utf-8'"); // Устанавливаем кодировку соединения 
- $result_set = $db->query("SHOW TABLES"); // Запрашиваем все таблицы из базы 
- while (($table = $result_set->fetch_assoc()) != false) { 
- /* Перебор всех таблиц в базе данных */ 
- if ($fp) { 
- $result_set_table = $db->query("SHOW CREATE TABLE `".$table[0]."`"); // Получаем запрос на создание таблицы 
- $query = $result_set_table->fetch_assoc(); 
- fwrite($fp, "n".$query[1].";n"); // Добавляем результат в файл 
- $rows = "SELECT * FROM `".$table[0]."`"; 
- $result_set_rows = $db->query($rows); // Получаем список всех записей в таблице 
- while (($row = $result_set_rows->fetch_assoc()) != false) { 
- $query = ""; 
- /* Путём перебора всех записей добавляем запросы на их создание в файл */ 
- foreach ($row as $field) { 
- if (is_null($field)) $field = "NULL"; 
- else $field = "'".$db->real_escape_string($field)."'"; // Экранируем значения 
- if ($query == "") $query = $field; 
- else $query .= ", ".$field; 
- } 
- $query = "INSERT INTO `".$table[0]."` VALUES (".$query.");"; 
- } 
- } 
- } 
- fclose($fp); // Закрываем файл 
- $db->close(); // Закрываем соединение с базой данных и переходим к следующей 
- } 
-   
- $zip = new ZipArchive(); // Создаём объект класса ZipArchive 
- $allfiles = array(); // Массив со списком всех файлов, которые будут помещены в архив 
- if ($zip->open($dump_dir."/".$filezip, ZipArchive::CREATE) === true) { 
- for ($i = 0; $i < count($source_dirs); $i++) { 
- /* Рекурсивный перебор всех директорий */ 
- if (is_dir($source_dirs[$i]))-  recoursiveDir ($source_dirs[$i]);
 
- else $allfiles[] = $source_dirs[$i]; // Добавляем файл в итоговый массив 
- foreach ($allfiles as $val){ 
- /* Добавляем в ZIP-архив все полученные файлы */ 
- $local = substr($val, $offset_dirs); 
- $zip->addFile($val, $local); 
- } 
- } 
- /* Добавляем в ZIP-архив все дампы баз данных */ 
- for ($i = 0; $i < count($db_files); $i++) { 
- $zip->addFile($db_files[$i], $local); 
- } 
- $zip->close(); 
- } 
-   
- for ($i = 0; $i < count($db_files); $i++) unlink($db_files[$i]); // Очищаем массив db_files 
-   
- /* Функция для рекурсивного перебора и сохранения всех файлов и папок в массив, который затем возвращается */ 
- function recoursiveDir($dir){ 
- global $allfiles; 
- if ($files = glob($dir."/{,.}*",-  GLOB_BRACE )) {
 
- foreach($files as $file){ 
- if (($b_name == ".") || ($b_name == "..")) continue; 
- if (is_dir($file))-  recoursiveDir ($file);
 
- else $allfiles[] = $file; 
- } 
- } 
- } 
-   
- /* Функция для удаления всех старых архивов */ 
- function deleteOldArchive() { 
- global $dump_dir; 
- global $delay_delete; 
- $files = glob($dump_dir."/*.zip"); 
- foreach ($files as $file) 
- } 
- ?>