Резервное копирование сайта на WordPress — это обязательная практика для любого администратора. Регулярные бэкапы помогают защитить данные от потери из-за ошибок, взломов или сбоев хостинга. В этой статье мы подробно разберём, как автоматизировать процесс создания резервных копий с помощью PHP-кода, а также рассмотрим несколько полезных плагинов, которые упростят задачу.
Почему важно автоматизировать резервное копирование WordPress
Ручное создание бэкапов требует времени и дисциплины, что не всегда возможно при плотном графике. Автоматизация позволяет:
- Регулярно создавать копии без участия пользователя;
- Хранить копии в удалённых хранилищах (FTP, Dropbox, Google Drive);
- Минимизировать риск потери данных;
- Интегрировать процесс в CRON задачи сервера.
Для реализации автоматического бэкапа можно использовать готовые плагины, но если требуется гибкость и тонкая настройка, то лучший вариант — написать собственный код.
Использование PHP для создания резервной копии базы данных и файлов
Основные составляющие любого WordPress-сайта — база данных и файлы темы, плагинов, загрузок. Для полного бэкапа нужно сохранить обе части. Рассмотрим, как это сделать с помощью PHP.
Резервное копирование базы данных
Для создания дампа базы данных можно использовать класс WPDB, который доступен в ядре WordPress. Пример функции, которая экспортирует базу в SQL-файл:
function wptool_export_database_backup() {
global $wpdb;
$tables = $wpdb->get_results('SHOW TABLES', ARRAY_N);
$sql = '';
foreach ($tables as $table) {
$table_name = $table[0];
$create_table = $wpdb->get_row("SHOW CREATE TABLE $table_name", ARRAY_N);
$sql .= "\nDROP TABLE IF EXISTS $table_name;\n";
$sql .= $create_table[1] . ";\n\n";
$rows = $wpdb->get_results("SELECT * FROM $table_name", ARRAY_A);
foreach ($rows as $row) {
$vals = array_map(array($wpdb, 'escape'), array_values($row));
$vals = array_map(function($v) { return is_null($v) ? 'NULL' : "'" . addslashes($v) . "'"; }, $vals);
$sql .= "INSERT INTO $table_name VALUES(" . implode(',', $vals) . ");\n";
}
$sql .= "\n";
}
$backup_file = WP_CONTENT_DIR . '/backups/db_backup_' . date('Y-m-d_H-i-s') . '.sql';
file_put_contents($backup_file, $sql);
return $backup_file;
}Эта функция перебирает все таблицы базы, создаёт SQL-дамп с командами DROP и INSERT и сохраняет файл в папке wp-content/backups. Перед использованием убедитесь, что папка существует и доступна для записи.
Резервное копирование файлов сайта
Для копирования файлов можно использовать встроенные функции PHP, например, ZipArchive для создания архива с нужными директориями:
function wptool_create_files_backup() {
$zip = new ZipArchive();
$backup_file = WP_CONTENT_DIR . '/backups/files_backup_' . date('Y-m-d_H-i-s') . '.zip';
if ($zip->open($backup_file, ZipArchive::CREATE) !== TRUE) {
return false;
}
$directories = [
ABSPATH . 'wp-content/uploads',
ABSPATH . 'wp-content/plugins',
ABSPATH . 'wp-content/themes'
];
foreach ($directories as $dir) {
$files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($dir));
foreach ($files as $file) {
if (!$file->isDir()) {
$filePath = $file->getRealPath();
$relativePath = substr($filePath, strlen(ABSPATH));
$zip->addFile($filePath, $relativePath);
}
}
}
$zip->close();
return $backup_file;
}Эта функция создаёт ZIP-архив с файлами из папок uploads, plugins и themes. Вы можете добавить другие директории по необходимости.
Автоматизация запуска резервного копирования через WP-Cron
WordPress имеет встроенный планировщик задач — WP-Cron, с помощью которого можно настроить регулярный запуск бэкапа.
Регистрация собственного события для бэкапа
Добавьте в functions.php или плагин следующий код для регистрации расписания и хука:
function wptool_schedule_backup() {
if (!wp_next_scheduled('wptool_auto_backup_hook')) {
wp_schedule_event(time(), 'daily', 'wptool_auto_backup_hook');
}
}
add_action('wp', 'wptool_schedule_backup');
add_action('wptool_auto_backup_hook', 'wptool_perform_backup');
function wptool_perform_backup() {
$db_backup = wptool_export_database_backup();
$files_backup = wptool_create_files_backup();
// Здесь можно добавить код отправки файлов на удалённое хранилище или по email
}Этот код запускает функцию бэкапа один раз в сутки. Вы можете изменить частоту, добавив собственный интервал через add_filter('cron_schedules', ...).
Плагины для резервного копирования с расширенными возможностями
Если не хочется писать код, можно использовать готовые решения. Вот несколько полезных плагинов с возможностью автоматизации и хранения копий в облаках:
- UpdraftPlus — популярный плагин для бэкапа и восстановления. Позволяет автоматизировать создание копий, резервировать на Google Drive, Dropbox, FTP и другие сервисы.
- BackWPup — бесплатный и мощный плагин с функцией планировщика, поддержкой различных облачных хранилищ и отправкой уведомлений по email.
- WPvivid Backup Plugin — современный инструмент с удобным интерфейсом, который позволяет также мигрировать сайт.
Все эти плагины можно скачать и посмотреть подробные инструкции по установке на WPSHOP.ru.
Отправка резервных копий на удалённые хранилища
Для повышения безопасности рекомендуется хранить бэкапы за пределами сервера. Рассмотрим пример отправки архива на FTP с помощью PHP:
function wptool_send_backup_ftp($file) {
$ftp_server = 'ftp.example.com';
$ftp_user = 'username';
$ftp_pass = 'password';
$conn_id = ftp_connect($ftp_server);
if (!$conn_id) return false;
$login_result = ftp_login($conn_id, $ftp_user, $ftp_pass);
if (!$login_result) {
ftp_close($conn_id);
return false;
}
ftp_pasv($conn_id, true);
$remote_file = '/backups/' . basename($file);
$upload = ftp_put($conn_id, $remote_file, $file, FTP_BINARY);
ftp_close($conn_id);
return $upload;
}Эту функцию можно вызвать внутри wptool_perform_backup(), чтобы отправлять созданные копии на FTP автоматически.
Рекомендации по организации резервного копирования
Чтобы система работала надёжно, учитывайте следующие моменты:
- Всегда проверяйте наличие и права на папки для хранения бэкапов.
- Используйте шифрование и защиту архивов, если в них содержатся конфиденциальные данные.
- Настраивайте уведомления о результате бэкапа — по email или в админку.
- Регулярно тестируйте восстановление из резервных копий.
Если хочется более продвинутого контроля, рассмотрите плагин Clearfy Pro, который содержит опции для оптимизации и безопасности, включая некоторые функции для резервного копирования.