Введение
Sypex Dumper 2 — отличный инструмент для создания бэкапов MySQL баз данных, который я привык использовать вместе с WordPress когда большие базы данных, как и наверное многие пользователи. Однако с выходом новых версий PHP и WordPress оригинальный плагин перестал работать корректно, а точнее перестал авторизовываться в админке WP и вместо обычного вида плагина я видел пустую страницу. Откатывать назад на устаревшие версии WP и php не было никакого желания. В интернете я не нашел решения.
В этой статье я расскажу, как я исправил проблемы авторизации и сделал Sypex Dumper 2 полностью совместимым с современными версиями PHP 8.3 и WordPress 6.0+.
Проблемы оригинальной версии
Поковырявшись в коде я нашел, что оригинальная версия плагина Sypex Dumper 2, а именно файл авторизации через WordPress имела несколько критических проблем:
1. Устаревшие функции MySQL
php
// Было в оригинале (не работает в PHP 7.0+) mysql_connect(); mysql_selectdb(); mysql_query();
2. Неправильные пути к файлам
php
// Относительные пути часто ломаются $path = '../wp-config.php';
3. Устаревшая проверка прав доступа
php
// Устаревший подход if($user[$config['TAB_PREFIX'] . 'user_level'] > 7)
4. Конфликт переменных
php
// Приводило к ошибке "Array to string conversion" $user = array(...); // массив данных пользователя $key = md5(... . $user . ...); // используется как строка
Полное решение
Представляю на ваше обозрение исправленную версию файла авторизации через WP для Sypex Dumper 2:
Исправленный код авторизации
php
<?php
// Sypex Dumper 2 authorization file for WordPress 4.x
// Version 1.3.1
// Исправления для php 8.3 и WP 6.0+ внес Alexander Parkhomenko https://wplife.ru
// =============================================================================
// ОСНОВНЫЕ ИСПРАВЛЕНИЯ:
// 1. Замена mysql_* на mysqli_* для PHP 7.0+
// 2. Абсолютные пути вместо относительных
// 3. Проверка прав через 'capabilities' вместо 'user_level'
// 4. Исправление структуры SQL запросов (ID вместо id)
// 5. Корректная обработка переменной $user
// =============================================================================
// Исправление путей
$path = dirname(dirname(__FILE__)) . '/wp-config.php';
if (!file_exists($path)) {
$path = $_SERVER['DOCUMENT_ROOT'] . '/wp-config.php';
}
$no_cookie = true;
$config = array();
$auth = 0;
$wp_username = '';
// Обработка cookies WordPress
foreach ($_COOKIE as $c => $v) {
if (strpos($c, 'wordpress_logged_in') !== false) {
$config['COOKIE'] = explode('|', $v);
break;
}
}
if (isset($config['COOKIE']) && count($config['COOKIE']) >= 3) {
if (file_exists($path)) {
$file = file_get_contents($path);
if (
preg_match_all("/define\s*\(\s*'(DB_\w+)',\s*'(.*?)'\s*\)\s*;/m", $file, $m, PREG_SET_ORDER) &&
preg_match("/^\\\$table_prefix\s*=\s*'(.+?)'\s*;/m", $file, $t)
) {
$config['TAB_PREFIX'] = stripcslashes($t[1]);
foreach ($m as $c) {
$config[$c[1]] = stripcslashes($c[2]);
}
// Современное соединение MySQLi
$link = mysqli_connect($config['DB_HOST'], $config['DB_USER'], $config['DB_PASSWORD'], $config['DB_NAME']);
if ($link) {
mysqli_set_charset($link, isset($config['DB_CHARSET']) ? $config['DB_CHARSET'] : 'utf8');
$username = mysqli_real_escape_string($link, $config['COOKIE'][0]);
$wp_username = $config['COOKIE'][0];
// Обновленный SQL-запрос для современного WordPress
$query = "SELECT u.ID, meta_key, meta_value
FROM {$config['TAB_PREFIX']}users u
LEFT JOIN {$config['TAB_PREFIX']}usermeta m ON (u.ID = m.user_id)
WHERE u.user_login = '$username'
AND m.meta_key IN ('{$config['TAB_PREFIX']}capabilities', 'session_tokens')";
$r = mysqli_query($link, $query);
if ($r && mysqli_num_rows($r) > 0) {
$user_data = array();
while ($u = mysqli_fetch_assoc($r)) {
$user_data[$u['meta_key']] = $u['meta_value'];
}
if (isset($user_data['session_tokens'])) {
$tokens = unserialize($user_data['session_tokens']);
$token = hash('sha256', $config['COOKIE'][2]);
if (isset($tokens[$token])) {
$session_data = $tokens[$token];
if (time() <= $session_data['expiration']) {
// Проверка современных возможностей
if (isset($user_data[$config['TAB_PREFIX'] . 'capabilities'])) {
$caps = unserialize($user_data[$config['TAB_PREFIX'] . 'capabilities']);
if (isset($caps['administrator']) && $caps['administrator']) {
$auth = 1;
$this->CFG['my_db'] = $config['DB_NAME'];
$this->CFG['exitURL'] = '../wp-admin/';
$user = $wp_username; // String, not array!
}
}
}
}
}
}
mysqli_close($link);
}
}
}
}
if (!$auth) {
$user = '';
}
?>
Ключевые изменения
1. Современный подход к работе с базой данных
Было:
php
if($this->connect($config['DB_HOST'], '', $config['DB_USER'], $config['DB_PASSWORD'])){
mysql_selectdb($config['DB_NAME']);
mysql_query("SET NAMES {$config['DB_CHARSET']}");
}
Стало:
php
$link = mysqli_connect($config['DB_HOST'], $config['DB_USER'], $config['DB_PASSWORD'], $config['DB_NAME']);
if ($link) {
mysqli_set_charset($link, isset($config['DB_CHARSET']) ? $config['DB_CHARSET'] : 'utf8');
}
2. Правильная проверка прав администратора
Было:
php
if($user[$config['TAB_PREFIX'] . 'user_level'] > 7) $auth = 1;
Стало:
php
if (isset($user_data[$config['TAB_PREFIX'] . 'capabilities'])) {
$caps = unserialize($user_data[$config['TAB_PREFIX'] . 'capabilities']);
if (isset($caps['administrator']) && $caps['administrator']) {
$auth = 1;
}
}
3. Исправление критической ошибки с переменной $user
Было:
php
$user = array(...); // массив данных // ... где-то в коде Sypex Dumper ... $key = md5(... . $user . ...); // ОШИБКА! Array to string conversion
Стало:
php
$user_data = array(...); // массив данных $user = $wp_username; // строка с именем пользователя
Установка и настройка
Шаг 1: Скачайте Sypex Dumper 2
Скачайте последнюю версию Sypex Dumper 2 с официального сайта.
Шаг 2: Установите плагин для WordPress
Установите плагин для WordPress согласно инструкции которая есть в плагине, файл install_ru.txt
Шаг 3: Замените файл авторизации
Замените содержимое файла авторизации auth_wp4.php в папке Sypex Dumper (обычно sxd) на исправленный код выше.
Краткий список основных изменений:
- Замена mysql_ на mysqli_** — для поддержки PHP 7.0+
- Исправление путей — абсолютные пути вместо относительных
- Обновление проверки прав — ‘capabilities’ вместо ‘user_level’
- Исправление SQL запросов — правильные названия полей (ID вместо id)
- Обработка переменной $user — передача строки вместо массива
- Улучшенная обработка ошибок — проверка существования файлов и соединений
- Совместимость с разными версиями WP — гибкая проверка cookies
Заключение
Исправленная версия Sypex Dumper 2 позволяет продолжать использовать этот удобный инструмент для резервного копирования в современных средах WordPress. Все ключевые проблемы оригинального кода были решены, что обеспечивает стабильную работу плагина.
Если у вас возникли вопросы или нужна помощь с настройкой — оставляйте комментарии ниже!
