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

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

Зачем создавать резервные копии вручную и писать собственные скрипты

Плагины вроде UpdraftPlus или BackWPup отлично справляются с задачей, но у них есть ограничения: частота создания копий, формат архива, место хранения и т.д. Автоматизация через собственный PHP скрипт даст вам полный контроль над процессом, позволит интегрировать копирование в существующую инфраструктуру и избежать проблем с совместимостью.

Кроме того, написание собственного скрипта — хороший способ глубже понять структуру WordPress и научиться работать с файловой системой и базой данных на уровне PHP.

В итоге вы получаете:

  • Резервное копирование базы данных и файлов сайта;
  • Архивацию копий в zip-формате;
  • Хранение бэкапов в выбранной папке;
  • Возможность запускать скрипт из командной строки или через браузер.

Что нужно для создания резервной копии WordPress

Резервная копия WordPress состоит из двух основных частей:

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

Для автоматизации нам понадобится:

  • Доступ к файловой системе сайта;
  • Данные для подключения к базе данных (обычно из wp-config.php);
  • Библиотека для создания архивов (например, встроенный в PHP класс ZipArchive).

Получение настроек из wp-config.php

Чтобы не дублировать данные подключения к базе, мы можем подключить wp-config.php и использовать константы:

require_once __DIR__ . '/wp-config.php';
$db_host = DB_HOST;
$db_name = DB_NAME;
$db_user = DB_USER;
$db_password = DB_PASSWORD;

Это позволяет автоматически синхронизировать скрипт с текущими настройками WordPress.

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

Ниже пример простого скрипта, который создаёт архив с файлами и дамп базы данных.

<?php
// Подключаем настройки WordPress
require_once __DIR__ . '/wp-config.php';

// Настройки
$backupDir = __DIR__ . '/backups';
if (!is_dir($backupDir)) {
    mkdir($backupDir, 0755, true);
}

$date = date('Y-m-d_H-i-s');
$backupFile = $backupDir . "/wpzen_backup_{$date}.zip";

// Создаем дамп базы данных
function wpzen_create_db_dump($host, $user, $pass, $dbname, $dumpPath) {
    $command = "mysqldump --host={$host} --user={$user} --password={$pass} {$dbname} > {$dumpPath}";
    system($command, $return_var);
    return $return_var === 0;
}

$dbDumpPath = $backupDir . "/db_backup_{$date}.sql";
if (!wpzen_create_db_dump(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME, $dbDumpPath)) {
    die('Ошибка при создании дампа базы данных');
}

// Создаем архив с файлами и дампом
$zip = new ZipArchive();
if ($zip->open($backupFile, ZipArchive::CREATE) !== true) {
    die('Не удалось создать архив');
}

// Рекурсивная функция для добавления файлов в архив
function wpzen_add_folder_to_zip($folder, $zip, $localPath = '') {
    $handle = opendir($folder);
    while (($file = readdir($handle)) !== false) {
        if ($file === '.' || $file === '..' || $file === 'backups') continue;
        $filePath = $folder . '/' . $file;
        $localName = ltrim($localPath . '/' . $file, '/');
        if (is_dir($filePath)) {
            wpzen_add_folder_to_zip($filePath, $zip, $localName);
        } else {
            $zip->addFile($filePath, $localName);
        }
    }
    closedir($handle);
}

// Добавляем все файлы сайта кроме папки с бэкапами
wpzen_add_folder_to_zip(__DIR__, $zip);
// Добавляем дамп базы
$zip->addFile($dbDumpPath, basename($dbDumpPath));

$zip->close();

// Удаляем временный дамп
unlink($dbDumpPath);

echo "Резервная копия успешно создана: {$backupFile}";
?>

Этот скрипт создаст папку backups в корне сайта, сделает SQL дамп базы, затем запишет в архив все файлы сайта, кроме самой папки с бэкапами.

Запуск скрипта и автоматизация через cron

Скрипт можно запускать вручную через браузер (если есть доступ) или из командной строки:

php /path/to/wpzen_backup.php

Для автоматизации добавьте задание в cron, например, для ежедневного запуска в 3 часа ночи:

0 3 * * * /usr/bin/php /path/to/wpzen_backup.php >/dev/null 2>&1

Убедитесь, что права доступа к папке backups позволяют веб-серверу или пользователю cron создавать и читать файлы.

Безопасность и хранение резервных копий

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

Еще один вариант — настроить выгрузку созданных архивов на удалённый сервер или в облачное хранилище (например, Amazon S3) с помощью дополнительных скриптов.

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

Заключение

Создание собственного PHP скрипта для резервного копирования WordPress — отличный способ контролировать процесс, глубже понять устройство сайта и обезопасить проект. Приведённый пример можно дополнить дополнительными функциями, например, отправкой уведомлений на почту, удалением старых копий или интеграцией с другими сервисами.

Если у вас есть вопросы по коду или вы хотите расширить функциональность — пишите, разберём вместе.

Как создать многоязычный сайт на WordPress с помощью Polylang
26.09.2026
Оптимизация базы данных WordPress: как ускорить сайт и уменьшить нагрузку
25.09.2026
Как отключить XML sitemap для отдельных типов записей в WordPress
28.09.2026
WordPress отладка и логирование ошибок: практическое руководство
27.09.2026
Удаление пустых метаданных в WordPress: как оптимизировать базу данных
03.10.2026