Автоматизация создания резервных копий WordPress с помощью PHP-кода

Резервное копирование сайта на 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, который содержит опции для оптимизации и безопасности, включая некоторые функции для резервного копирования.

Как установить ограничение на число товаров в корзине WooCommerce
29.05.2026
Автоматическое изменение стоимости товара WooCommerce при изменении количества
07.06.2026
Автоматический импорт продуктов WooCommerce из CSV с примерами кода
04.02.2026
Как автоматизировать управление ролями пользователей в WordPress с помощью кода
01.02.2026
Как удалить или изменить авторские права в метаданных WordPress
08.02.2026