wpmoney.ru wordpress WP Money

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

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

Резервное копирование — ключевой элемент безопасности любого сайта на WordPress. Даже при использовании надёжного хостинга и современных плагинов всегда есть риск сбоя, взлома или ошибки при обновлении. Автоматизация процесса резервного копирования позволяет не забывать делать копии и минимизирует человеческий фактор.

В этой статье рассмотрим, как настроить автоматическое создание резервных копий с помощью собственного PHP-кода, а также разберём популярные плагины, которые помогут решить задачу без лишних сложностей.

Как работает резервное копирование WordPress

Типичная резервная копия включает в себя:

  • Файлы WordPress: ядро, темы, плагины, медиафайлы.
  • Базу данных MySQL или MariaDB, где хранятся все записи, настройки, пользовательские данные.

Для качественного восстановления нужно сохранить обе части. Простой экспорт базы и копирование wp-content — минимальный набор.

Пример функции для создания резервной копии базы данных

Ниже пример функции, которая создаёт дамп базы данных и сохраняет его в папку wp-content/backups. Функция wpmoney_backup_database() использует встроенные константы WordPress для подключения к базе и вызова mysqldump.

function wpmoney_backup_database() {
    global $wpdb;
    $backup_dir = WP_CONTENT_DIR . '/backups';
    if ( ! file_exists( $backup_dir ) ) {
        wp_mkdir_p( $backup_dir );
    }
    $filename = 'db-backup-' . date('Y-m-d-H-i-s') . '.sql';
    $filepath = $backup_dir . '/' . $filename;
    
    $command = sprintf(
        'mysqldump --user=%s --password=%s --host=%s %s > %s',
        DB_USER,
        DB_PASSWORD,
        DB_HOST,
        DB_NAME,
        escapeshellarg( $filepath )
    );
    exec( $command, $output, $return_var );
    
    if ( $return_var === 0 ) {
        return $filepath;
    } else {
        return false;
    }
}

Этот код можно вызвать вручную или по cron, чтобы регулярно сохранять дампы базы. Важно убедиться, что у сервера есть доступ к утилите mysqldump и права на запись в папку.

Автоматизация резервного копирования с помощью WP-Cron

Для запуска функции по расписанию используем встроенный планировщик WordPress — WP-Cron. Добавим регистрацию события и обработчик:

add_action( 'wpmoney_daily_backup', 'wpmoney_backup_database' );

function wpmoney_activate_backup_cron() {
    if ( ! wp_next_scheduled( 'wpmoney_daily_backup' ) ) {
        wp_schedule_event( time(), 'daily', 'wpmoney_daily_backup' );
    }
}
register_activation_hook( __FILE__, 'wpmoney_activate_backup_cron' );

function wpmoney_deactivate_backup_cron() {
    $timestamp = wp_next_scheduled( 'wpmoney_daily_backup' );
    if ( $timestamp ) {
        wp_unschedule_event( $timestamp, 'wpmoney_daily_backup' );
    }
}
register_deactivation_hook( __FILE__, 'wpmoney_deactivate_backup_cron' );

Этот код задаёт ежедневный запуск функции резервного копирования. Такой подход гарантирует регулярные бэкапы без необходимости вмешательства.

Резервное копирование файлов сайта через PHP

Для полного бэкапа нужно сохранять не только базу, но и файлы сайта. Простейший способ — создать архив папки wp-content с темами, плагинами и медиа.

Пример функции, создающей ZIP-архив с помощью встроенного класса ZipArchive:

function wpmoney_backup_wp_content() {
    $source = WP_CONTENT_DIR;
    $backup_dir = WP_CONTENT_DIR . '/backups';
    if ( ! file_exists( $backup_dir ) ) {
        wp_mkdir_p( $backup_dir );
    }
    $zip_file = $backup_dir . '/wp-content-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) + 1);
            $zip->addFile($filePath, $relativePath);
        }
    }

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

Можно вызывать эту функцию совместно с дампом базы, чтобы получать полноценный архив сайта.

Популярные плагины для автоматического резервного копирования WordPress

UpdraftPlus

Один из самых популярных и надёжных плагинов для резервного копирования. Позволяет создавать бэкапы базы и файлов, сохранять копии на удалённые сервисы (Google Drive, Dropbox, FTP и др.), а также восстанавливать сайт в пару кликов.

BackWPup

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

WP Time Capsule

Плагин с уникальным подходом — делает инкрементальные копии, то есть сохраняет только изменения, что экономит место и ускоряет процесс.

Интеграция с WPShop и дополнительная автоматизация

Для пользователей, которые используют решения из WPShop.ru, рекомендуем обратить внимание на плагин Clearfy Pro. Он предлагает расширенные настройки оптимизации и безопасности, включая функции для работы с бэкапами и очисткой базы.

Комбинируя собственный код с возможностями плагинов, можно добиться максимально надежной и удобной системы резервного копирования, полностью подстроенной под задачи проекта.

Рекомендации по безопасности и хранению резервных копий

Важно хранить резервные копии не только на сервере сайта, но и на удалённых носителях, чтобы защититься от потери данных при сбое хостинга. Используйте FTP, облачные хранилища или специализированные сервисы.

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

Пример правила для Apache:

RewriteEngine On
RewriteRule ^wp-content/backups/ - [F,L]

В итоге автоматизация резервного копирования — обязательный элемент поддержки стабильности WordPress-сайта. Используйте приведённые примеры и рекомендации, чтобы настроить процесс под себя и быть уверенным в сохранности данных.

×
Делай сайт лучше!!

-20% на премиум темы и плагины

Использовать скидку ⋙