Как создать автоматическую резервную копию WordPress с помощью PHP

Автоматическое создание резервных копий — одна из ключевых задач для любого сайта на WordPress. В этой статье разберём, как настроить собственный механизм автосоздания бэкапов с помощью PHP, что позволит вам не зависеть от сторонних плагинов и иметь полный контроль над процессом.

Почему важно создавать резервные копии WordPress

Резервное копирование позволяет защитить данные сайта от потери из-за взлома, ошибки обновления, сбоя сервера или человеческого фактора. Особенно важно иметь регулярные копии базы данных и файлов сайта, чтобы быстро восстановить работоспособность.

Большинство популярных плагинов делают это за вас, но бывают ситуации, когда хочется минимизировать использование плагинов или сделать кастомное решение под свои нужды.

Основные компоненты резервной копии WordPress

Для полноценного бэкапа нужно сохранить:

  • Файлы темы, плагинов, загрузок — все содержимое wp-content и корневой каталог;
  • Базу данных MySQL, где хранятся все записи, настройки и пользовательские данные.

В нашем решении мы реализуем экспорт базы и архивирование файлов с помощью PHP.

Создание резервной копии базы данных WordPress на PHP

Для выгрузки базы данных нам понадобится подключиться к MySQL и получить дамп таблиц. Ниже пример функции wpkit_create_db_backup(), которая создаёт SQL-файл с текущим состоянием базы.

function wpkit_create_db_backup() {
    global $wpdb;
    $tables = $wpdb->get_results('SHOW TABLES', ARRAY_N);
    $sql_dump = '';

    foreach ($tables as $table) {
        $table_name = $table[0];
        $create_table = $wpdb->get_row("SHOW CREATE TABLE `" . $table_name . "`", ARRAY_N);
        $sql_dump .= "DROP TABLE IF EXISTS `" . $table_name . "`;\n";
        $sql_dump .= $create_table[1] . ";\n\n";

        $rows = $wpdb->get_results("SELECT * FROM `" . $table_name . "`", ARRAY_A);
        foreach ($rows as $row) {
            $values = array_map(function($value) use ($wpdb) {
                if (is_null($value)) return 'NULL';
                return "'" . $wpdb->escape($value) . "'";
            }, array_values($row));
            $sql_dump .= "INSERT INTO `" . $table_name . "` VALUES (" . implode(", ", $values) . ");\n";
        }
        $sql_dump .= "\n";
    }

    $backup_dir = WP_CONTENT_DIR . '/backups';
    if (!file_exists($backup_dir)) {
        mkdir($backup_dir, 0755, true);
    }
    $filename = $backup_dir . '/db-backup-' . date('Y-m-d_H-i-s') . '.sql';
    file_put_contents($filename, $sql_dump);
    return $filename;
}

Эта функция перебирает все таблицы, создаёт их дамп с данными и сохраняет в папке wp-content/backups.

Архивация файлов WordPress с помощью PHP

Чтобы сохранить все файлы сайта, можно использовать класс ZipArchive. Пример функции wpkit_create_files_backup() ниже:

function wpkit_create_files_backup() {
    $source = ABSPATH; // корень WordPress
    $backup_dir = WP_CONTENT_DIR . '/backups';
    if (!file_exists($backup_dir)) {
        mkdir($backup_dir, 0755, true);
    }
    $zip_file = $backup_dir . '/files-backup-' . date('Y-m-d_H-i-s') . '.zip';

    $zip = new ZipArchive();
    if ($zip->open($zip_file, ZipArchive::CREATE) !== TRUE) {
        return false;
    }

    $files = new RecursiveIteratorIterator(
        new RecursiveDirectoryIterator($source),
        RecursiveIteratorIterator::LEAVES_ONLY
    );

    foreach ($files as $name => $file) {
        if (!$file->isDir()) {
            $filePath = $file->getRealPath();
            $relativePath = substr($filePath, strlen($source));
            $zip->addFile($filePath, $relativePath);
        }
    }

    $zip->close();
    return $zip_file;
}

Функция создаёт ZIP-архив с полным содержимым WordPress, включая все плагины, темы и загрузки.

Настройка автоматического запуска резервного копирования

Чтобы выполнять резервное копирование регулярно, можно запустить функцию из cron-задачи или WordPress Cron. Пример добавления ежедневного события:

add_action('wpkit_daily_backup_event', 'wpkit_daily_backup');

function wpkit_daily_backup() {
    $db_backup = wpkit_create_db_backup();
    $files_backup = wpkit_create_files_backup();
    // Здесь можно добавить уведомление по email или логирование
}

// Регистрируем событие при активации темы или плагина
if (!wp_next_scheduled('wpkit_daily_backup_event')) {
    wp_schedule_event(time(), 'daily', 'wpkit_daily_backup_event');
}

Этот код настроит ежедневное выполнение функции, которая создаст резервные копии.

Советы по оптимизации и безопасности бэкапов

Несколько рекомендаций для безопасного и эффективного бэкапа:

  • Храните бэкапы вне публичной папки сайта, чтобы их нельзя было скачать напрямую.
  • Ограничьте количество хранимых файлов, удаляя старые бэкапы автоматически.
  • Рассмотрите возможность отправки копий на удалённый сервер или облако для дополнительной защиты.
  • Шифруйте важные данные, если бэкапы содержат чувствительную информацию.

Использование плагина Clearfy Pro для автоматизации бэкапов

Если вы хотите дополнить кастомный код мощным инструментом, обратите внимание на Clearfy Pro. Этот плагин позволяет не только оптимизировать сайт, но и настроить удобное автоматическое резервное копирование с гибкими настройками и уведомлениями.

Clearfy Pro отлично сочетается с собственными скриптами бэкапа, позволяя вам сконцентрироваться на разработке, не заботясь о рутинных задачах.

Выводы и практические рекомендации

Создание собственного механизма резервного копирования на PHP — прекрасный способ глубже понимать работу WordPress и контролировать процесс. С помощью небольших функций вы можете автоматизировать сохранение базы данных и файлов, а также интегрировать эти процессы с WP Cron.

Для большинства проектов сочетание собственного кода и профессиональных плагинов, как Clearfy Pro, даст оптимальный баланс между гибкостью и удобством.

Оптимизация базы данных WordPress без повышения нагрузки на сервер
11.12.2025
WooCommerce: как заблокировать оплату при наличии товаров с определёнными атрибутами в корзине
25.06.2026
WooCommerce: автоматическое изменение стоимости товаров при оплате
01.07.2026
Как удалить неиспользуемые мета данные в WordPress для оптимизации базы
18.03.2026
Как удалить заблокированные плагины в WordPress без риска
26.01.2026