wpbackup.ru wordpress WPBackup.ru

Как сохранить резервную копию WordPress на FTP сервере

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

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

FTP (File Transfer Protocol) — классический протокол передачи файлов, который поддерживается практически на всех хостингах и серверных платформах. Основные преимущества использования FTP для бэкапов:

  • Отделение резервных копий от основного сервера сайта — защитит данные при сбоях или атаках;
  • Возможность использовать выделенный или внешний сервер, например, NAS или VPS;
  • Большинство хостеров предоставляют FTP доступ, так что дополнительных затрат не потребуется;
  • Простота настройки и интеграции с WordPress через PHP или плагины.

Главный минус — отсутствие шифрования в классическом FTP, поэтому рекомендуется использовать FTPS или SFTP, если сервер поддерживает, для безопасности передачи данных.

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

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

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

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

function wpbackup_create_backup() {
    $backup_dir = WP_CONTENT_DIR . '/backups';
    if (!file_exists($backup_dir)) {
        mkdir($backup_dir, 0755, true);
    }
    $date = date('Y-m-d_H-i-s');
    $zip_path = "$backup_dir/backup_$date.zip";

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

    // Добавляем файлы WordPress
    $rootPath = realpath(ABSPATH);
    $files = new RecursiveIteratorIterator(
        new RecursiveDirectoryIterator($rootPath),
        RecursiveIteratorIterator::LEAVES_ONLY
    );

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

    // Создаем дамп базы данных
    $db_file = "$backup_dir/db_backup_$date.sql";
    $command = sprintf('mysqldump --user=%s --password=%s --host=%s %s > %s',
        DB_USER, DB_PASSWORD, DB_HOST, DB_NAME, $db_file);
    exec($command);

    $zip->addFile($db_file, 'db_backup.sql');
    $zip->close();

    // Удаляем файл дампа
    unlink($db_file);

    return $zip_path;
}

В этом примере функция wpbackup_create_backup создаёт zip-архив с файлами WordPress и встраивает в него дамп базы данных. Для работы mysqldump должен быть доступен на сервере. Если нет — нужно использовать PHP-методы экспорта.

Загрузка архива на FTP сервер

После создания архива нужно отправить его на FTP. Ниже пример функции для загрузки файла через FTP:

function wpbackup_upload_to_ftp($local_file, $ftp_config) {
    $conn_id = ftp_connect($ftp_config['host'], $ftp_config['port'] ?? 21);
    if (!$conn_id) {
        return false;
    }
    $login_result = ftp_login($conn_id, $ftp_config['user'], $ftp_config['pass']);
    if (!$login_result) {
        ftp_close($conn_id);
        return false;
    }

    if (!empty($ftp_config['ssl']) && $ftp_config['ssl']) {
        ftp_ssl_connect($ftp_config['host']);
    }

    ftp_pasv($conn_id, true); // Включаем пассивный режим

    $remote_path = $ftp_config['remote_path'] ?? '/';
    ftp_chdir($conn_id, $remote_path);

    $upload = ftp_put($conn_id, basename($local_file), $local_file, FTP_BINARY);

    ftp_close($conn_id);
    return $upload;
}

Функция принимает путь к локальному файлу и массив с конфигурацией FTP:

$ftp_config = [
    'host' => 'ftp.example.com',
    'user' => 'ftpuser',
    'pass' => 'ftppassword',
    'port' => 21,
    'remote_path' => '/backups',
    'ssl' => false // использовать FTPS, если доступно
];

Интеграция и автоматизация процесса бэкапа и загрузки

Объединив обе функции, получаем процесс автоматического создания и отправки резервной копии на FTP:

function wpbackup_run_backup_to_ftp() {
    $backup_file = wpbackup_create_backup();
    if (!$backup_file) {
        error_log('WPBackup: Не удалось создать резервную копию');
        return false;
    }

    $ftp_config = [
        'host' => 'ftp.example.com',
        'user' => 'ftpuser',
        'pass' => 'ftppassword',
        'remote_path' => '/backups'
    ];

    $upload_result = wpbackup_upload_to_ftp($backup_file, $ftp_config);
    if (!$upload_result) {
        error_log('WPBackup: Не удалось загрузить файл на FTP');
        return false;
    }

    // Опционально удалить локальный файл после успешной загрузки
    unlink($backup_file);
    return true;
}

Эту функцию можно запускать вручную или через WP-Cron, чтобы выполнять бэкап регулярно.

Плагины для резервного копирования с поддержкой FTP

Если вы не хотите писать код, существует ряд плагинов для WordPress с поддержкой резервного копирования на FTP сервер:

  • UpdraftPlus — один из самых популярных плагинов, поддерживает автоматическую загрузку на FTP, SFTP и другие облачные сервисы. Простой интерфейс и множество настроек.
  • BackWPup — бесплатный и мощный плагин с возможностью сохранять бэкапы на FTP, Dropbox, S3 и другие сервисы.
  • WPBackItUp — удобный и быстрый плагин для автоматического создания резервных копий и отправки их на FTP.

Для настройки FTP в этих плагинах обычно достаточно указать параметры подключения в разделе настроек резервного копирования. Рекомендуется использовать защищённые протоколы (SFTP, FTPS), если сервер поддерживает.

Безопасность и рекомендации при хранении бэкапов на FTP

При работе с FTP хранение резервных копий требует особого внимания к безопасности:

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

Пример функции для удаления бэкапов старше 30 дней:

function wpbackup_cleanup_old_backups($backup_dir, $days = 30) {
    if (!is_dir($backup_dir)) return;

    $files = glob($backup_dir . '/*.zip');
    $now = time();

    foreach ($files as $file) {
        if ($now - filemtime($file) >= 60 * 60 * 24 * $days) {
            unlink($file);
        }
    }
}

Выводы и рекомендации для практического использования

Резервное копирование WordPress на FTP сервер — отличный вариант для дополнительной защиты данных без лишних затрат. При правильной настройке и автоматизации вы обеспечите безопасность сайта и быстрое восстановление при проблемах.

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

Не забывайте проверять работоспособность бэкапов и безопасность FTP соединения — это ключ к надежной защите сайта.

×
Оптимизируй свой сайт!

Скидка -15% на премиум плагин Clearfy Pro

Купить плагин сейчас ⋙