Как создать автоматический бэкап WordPress без плагинов

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

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

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

  • Производительность: плагины могут замедлять работу сайта, создавая дополнительную нагрузку.
  • Безопасность: сторонний код — это потенциальная точка уязвимости.
  • Контроль и гибкость: собственные скрипты дают полный контроль над процессом и позволяют интегрировать бэкапы в существующие процессы.

Поэтому рассмотрим подход с помощью PHP и cron.

Использование cron для автоматического запуска бэкапов

Для начала необходимо настроить планировщик задач cron на сервере — это позволит запускать скрипт с нужной периодичностью.

Например, чтобы запускать резервное копирование каждый день в 3 часа ночи, добавьте в cron следующую строку:

0 3 * * * /usr/bin/php /путь/к/вашему/скрипту/wpkey-backup.php

Где /usr/bin/php — путь к интерпретатору PHP на сервере, а /путь/к/вашему/скрипту/wpkey-backup.php — путь к вашему PHP-скрипту для бэкапа.

Если у вас нет доступа к cron, можно использовать аналогичные сервисы планирования задач, например, на хостинге или внешние cron-сервисы.

Создание PHP-скрипта для резервного копирования базы данных и файлов

Основные задачи при создании бэкапа — это сохранение базы данных и файлов сайта.

Резервное копирование базы данных

Для экспорта базы данных можно использовать команду mysqldump, вызванную из PHP, либо сделать дамп средствами PHP.

Пример использования exec в PHP для создания дампа:

function wpkey_create_db_backup() {
    $db_user = 'DB_USER';
    $db_password = 'DB_PASSWORD';
    $db_name = 'DB_NAME';
    $backup_file = __DIR__ . '/backup/db-backup-' . date('Y-m-d_H-i-s') . '.sql';

    $command = "mysqldump -u {$db_user} -p'{$db_password}' {$db_name} > {$backup_file}";
    exec($command, $output, $return_var);
    return ($return_var === 0) ? $backup_file : false;
}

Важно заменить DB_USER, DB_PASSWORD и DB_NAME на реальные данные. Если exec запрещён, можно использовать mysqli для выгрузки данных, но это сложнее.

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

Для копирования файлов сайта оптимально упаковать их в архив ZIP. Пример создания архива ZIP в PHP:

function wpkey_create_files_backup($source_dir) {
    $zip_name = __DIR__ . '/backup/files-backup-' . date('Y-m-d_H-i-s') . '.zip';
    $zip = new ZipArchive();
    if ($zip->open($zip_name, ZipArchive::CREATE) !== TRUE) {
        return false;
    }

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

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

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

В переменную $source_dir передайте путь к корню вашего сайта, например, __DIR__ . '/../'.

Объединяем всё в один скрипт и отправляем бэкапы на почту или облако

Теперь объединим функции и добавим отправку архива на email или загрузку в облако (например, Dropbox, Google Drive), либо просто сохраняем на сервере.

Пример простого объединённого скрипта с отправкой email:

function wpkey_send_backup_email($file_path) {
    $to = 'youremail@example.com';
    $subject = 'WordPress Backup ' . date('Y-m-d');
    $message = 'В приложении резервная копия сайта.';
    $headers = "From: wpkey-backup@example.com\r\n";

    $file_content = chunk_split(base64_encode(file_get_contents($file_path)));
    $separator = md5(time());

    $headers .= "MIME-Version: 1.0\r\n";
    $headers .= "Content-Type: multipart/mixed; boundary=\"" . $separator . "\"\r\n";

    $body = "--" . $separator . "\r\n";
    $body .= "Content-Type: text/plain; charset=iso-8859-1\r\n";
    $body .= "Content-Transfer-Encoding: 7bit\r\n\r\n";
    $body .= $message . "\r\n";

    $body .= "--" . $separator . "\r\n";
    $body .= "Content-Type: application/octet-stream; name=\"" . basename($file_path) . "\"\r\n";
    $body .= "Content-Transfer-Encoding: base64\r\n";
    $body .= "Content-Disposition: attachment\r\n\r\n";
    $body .= $file_content . "\r\n";
    $body .= "--" . $separator . "--";

    return mail($to, $subject, $body, $headers);
}

// Основной код
$backup_dir = __DIR__ . '/backup';
if (!file_exists($backup_dir)) {
    mkdir($backup_dir, 0755, true);
}

$db_backup = wpkey_create_db_backup();
$files_backup = wpkey_create_files_backup(__DIR__ . '/../');

if ($db_backup) {
    wpkey_send_backup_email($db_backup);
}
if ($files_backup) {
    wpkey_send_backup_email($files_backup);
}

Обратите внимание, что отправка больших файлов по email может не сработать из-за ограничений почтового сервера. В этом случае лучше настроить загрузку в облако с помощью API.

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

При создании бэкапов без плагинов обязательно следите за безопасностью:

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

Также можно настроить уведомления о выполнении бэкапа и ошибок.

Альтернативные решения: плагины для резервного копирования

Если вы всё же решите использовать плагины, советуем обратить внимание на проверенные инструменты, которые оптимизированы и поддерживаются:

  • Clearfy Pro — комплексное решение для оптимизации и безопасности, включает функции резервного копирования.
  • UpdraftPlus — популярный плагин для резервного копирования с возможностью загрузки в облако.
  • WP-DB-Backup — простой плагин для сохранения базы данных.

Используйте плагины, если хотите получить готовое решение без необходимости писать код и настраивать cron.

Как удалить пустые meta поля в WordPress
17.03.2026
Как автоматизировать удаление спама в комментариях WordPress
08.01.2026
WooCommerce: автоматическое изменение статуса заказа при отмене оплаты
31.05.2026
Как работать с настройками в WordPress через PHP
15.12.2025
Как изменить размер изображений в WordPress без потери качества
05.04.2026

Ресурс в разработке, скоро здесь будет сайт по вордпресс