Ковертор БД Vbulletin 3.7.1 -> phpbb3

Проблемы с установкой или работой phpBB 3.0.x? Получите помощь здесь!
С 1 января 2017 года phpBB Group прекращает поддержку phpBB версии 3.0.
Сайт официальной русской поддержки phpBB Guru продолжит поддержку phpBB 3.0 до 1 июля 2017 года.
Подробнее: Окончание поддержки phpBB 3.0.
Правила форума
Местная Конституция | Шаблон запроса | Документация (phpBB3) | Переход на 3.0.6 и выше | FAQ-3 (phpbb3) | Как задавать вопросы | Как устанавливать моды

Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение ;) ).
MyMan
phpBB 1.2.0
Сообщения: 14
Стаж: 17 лет 3 месяца
Поблагодарили: 2 раза

Ковертор БД Vbulletin 3.7.1 -> phpbb3

Сообщение MyMan »

Здравствуйте! Столкнулся с такой проблемой, необходима конвертация базы Воблы в pypbb3.

Не спешите отправлять меня в определенный темы и посик. Все, что есть на вашем форуме я уже нашел, но это не помогло!
В этой теме рассказывается как конвертнуть Воблу сначала в phpbb2, а потом в phpbb3:
http://www.phpbbguru.net/community/topic14590-15.html

Но для форума 3.7 этот конвертор не подошел, он написал кучу ошибок и искалечил базу.

Мне пришлось обратится к форуму phpbb.com и вот что я там отрыл:
http://www.phpbb.com/community/viewtopi ... 5&t=557811

Этот конвертор конвертит сразу в phpbb3, но для форума 3.7 он тоже не подошел, так как в этом форуме разработчики переименовали таблицу юзеров и наделали много другого. и я в этом же топике нарыл более свежий конвертор:
http://www.phpbb.com/community/viewtopi ... 0#p5862045

он подходит для форумов и 3.7 b 3.8.

Но возникла одна проблема. При конвертации форум выдает ошибку:

Что имена некоторых пользователей конфликтуют, удалите конфликтные имена, так чтобы каждому ID соответсвовало 1 имя пользователя.

И тут я сломался. Я бился часов 7 над этим.

нашел вот это:
http://www.phpbb.com/community/viewtopi ... 35&start=0

даже нашел сообщения, где кто-то кому-то дает совет, что надо удалить кофликтные имена. Но я не могу понять какие имена могут конфликтовать. Ибо у меня в Вобле каждому ID соответсвует только один ник. И я стал методом тыка определять какие имена ему не нравятся. Приходилось каждый раз удалять все, переустанавливать и запускать конвертор и в базе пользователей Воблы оставлять только пару тройку юзеров, с разными типами ников. Но это не помогало в 90% он выдавал одну и туже ошибку. Не выдает он ее только, когда я оставляю только два первых в списке ника в вобле, а остальные удаляю. И тогда конвертация идет, но форум не запускается, так как как я понимаю, он не видит создателей тем и сообщений ибо они не сконвертированы.

пробовал убирать пробел у ников с пробелом
пробовал убирать всякие @, $ и % из ников
пробовал убирать .: - = из ников
пробовал удалять все изначально зарегиных пользователе (ботов, админа и анонима) из базы phpbb3

результат 0

Помогите пожалуйста, ибо задавать вопрос на англоязычном форуме у меня нет способности, я не так хорошо владею английским, чтобы сформулировать свою мысль правильно и доступно.
Аватара пользователя
crash
Former team member
Сообщения: 6517
Стаж: 22 года 2 месяца
Откуда: Бердск
Поблагодарили: 15 раз

Re: Ковертор БД Vbulletin 3.7.1 -> phpbb3

Сообщение crash »

а вам разве не пишет какие имена конфликтую или их id?

Добавлено спустя 1 минуту 34 секунды:
перед конвертированием измените имя конфликтующих пользователей, просто запомните их, чтобы после конвертирования вернуть все назад
Как правильно задавать вопросы
Для особо одаренных: поиск - это есть круто.
FAQ v.2 | FAQ v.3 | Шаблон запроса
MyMan
phpBB 1.2.0
Сообщения: 14
Стаж: 17 лет 3 месяца
Поблагодарили: 2 раза

Re: Ковертор БД Vbulletin 3.7.1 -> phpbb3

Сообщение MyMan »

Нет ничего не пишет, выдает только ошибку. Я сейчас не поленюсь, сделаю все ещё раз, чтобы написать здесь дословный текст который он выдает.

Добавлено спустя 3 минуты 58 секунд:
crash писал(а):перед конвертированием измените имя конфликтующих пользователей, просто запомните их, чтобы после конвертирования вернуть все назад
Дело в том, что я не могу понять какие именно имена ему не нравятся. Дело в том, что я пытался определить с какими именами он не хочет дружить и перед конфертацией в базе воблы оставлял разные типы имен например такой: p0nk@. И пробовал конвертировать. Ему не нравилось. Потом я переделывал p0nk@ на понка, но ему опять не нравилось.

Я даже оставлял например только первые 5 ID в базе воблы, остальные удалял. И там первые 5 ID нормальные ники, т.е. в одно слово и без всяких символов. Но ему опять не нравилось. Потом я оставил только первых 2 ID и он заработал.
Аватара пользователя
crash
Former team member
Сообщения: 6517
Стаж: 22 года 2 месяца
Откуда: Бердск
Поблагодарили: 15 раз

Re: Ковертор БД Vbulletin 3.7.1 -> phpbb3

Сообщение crash »

при конвертировании с 2 на 3, конвертер ругался на имена, которые начинались на И, пришлось эти имена переименовывать на время конвертации
Как правильно задавать вопросы
Для особо одаренных: поиск - это есть круто.
FAQ v.2 | FAQ v.3 | Шаблон запроса
MyMan
phpBB 1.2.0
Сообщения: 14
Стаж: 17 лет 3 месяца
Поблагодарили: 2 раза

Re: Ковертор БД Vbulletin 3.7.1 -> phpbb3

Сообщение MyMan »

crash писал(а):при конвертировании с 2 на 3, конвертер ругался на имена, которые начинались на И, пришлось эти имена переименовывать на время конвертации
Даже так?:) Ух ты. Чего не ждал, того не ждал. Но мне сложнее. Ибо если бы он писал, что именно ему не нравится. А то он не пишет даже.
Критическая ошибка при конвертировании
Критическая ошибка при конвертировании

functions_vb30.php [ 1540 ]

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

Мне ещё везет, у меня не так много пользователей (500 с копейками), я просто подумал и решил, периименовать их всех в цифры, а потом в ручную вернуть им имена. Ибо выхода видимо нет. Но если будут более дельные предложения напишите пожалуйста:) Ибо не очень тянет провести пару часов в переименовках.

Добавлено спустя 3 минуты 55 секунд:
Да и ещё один вопрос, почему ошибки выдаются в кривой кодировке?

Я вроде перевел базу воблы в UTF8 (поменял в ней все CHARSET и пересохранил файл SQL в UTF8) перед заливкой на локальный сервер и выставил Сопоставление соединения с MySQL: utf8_general_ci или это корявость денвера?
Аватара пользователя
crash
Former team member
Сообщения: 6517
Стаж: 22 года 2 месяца
Откуда: Бердск
Поблагодарили: 15 раз

Re: Ковертор БД Vbulletin 3.7.1 -> phpbb3

Сообщение crash »

наверное сервер отдает в windows кодировке, можно попробовать в .htaccess жестко кодировку utf-8.
Как правильно задавать вопросы
Для особо одаренных: поиск - это есть круто.
FAQ v.2 | FAQ v.3 | Шаблон запроса
Аватара пользователя
Izya
Former team member
Сообщения: 408
Стаж: 18 лет
Откуда: Абакан, Сибирь
Благодарил (а): 1 раз
Поблагодарили: 28 раз

Re: Ковертор БД Vbulletin 3.7.1 -> phpbb3

Сообщение Izya »

MyMan писал(а):конфликтующие имена пользователей
MyMan, дело не в том, что конвертеру не нравятся какие-то символы. Судя по ошибке, у Вас на форуме есть похожие имена пользователей, которые после обработки специальной функцией "очистки" имён становятся одинаковыми. Вы говорите, ошибка возникает даже при оставлении всего 5 первых пользователей? Покажите список их имён.
Изображение
MyMan
phpBB 1.2.0
Сообщения: 14
Стаж: 17 лет 3 месяца
Поблагодарили: 2 раза

Re: Ковертор БД Vbulletin 3.7.1 -> phpbb3

Сообщение MyMan »

Izya,

Я уже перевел все ники в аля 001, 002, 003 и т.д. И сконвертировал все. Пользователи там были:

Админ
Марина
BartSimpson
вера

5го хоть убей не помню, честно, просто у меня база воблы уже с 001, 002 и т.д. А перезаливать чтобы сейчас исправлять ники в обратную сторону (чтобы видеть какому номеру какой ник) я пока не стал, потому что появилась проблема с кодировкой. Форум сконвертировался. Все отлично. Разделы номр, топики норм. А сообщения в топика каракули. Что может быть не так?

У меня Вобла была в cp1251, я слил ее БД через DUMPER в SQL файл без сжатия.

В фале поменял все cp1251 на UTF8. Пересохранил SQL и сохранил его в кодировке UTF8. Сопоставление соединения с MySQL: utf8_general_ci. Но теперь такой странный трабл.

Сохранял файл в редакторе EditPlus, там при сохранении выбрал UTF8, он сохранился в неопознаный файл и я ему присвоил разрешение .sql руками. Может как-то по другому надо было сохранить? Просто названия тем и топиков НОРМ, а сообщения иероглифы.

Добавлено спустя 2 минуты 5 секунд:
у меня есть ещё редактор PSPad editor, может в нем пересохранить, но я там не знаю где выбрать кодировку на файл.
MyMan
phpBB 1.2.0
Сообщения: 14
Стаж: 17 лет 3 месяца
Поблагодарили: 2 раза

Re: Ковертор БД Vbulletin 3.7.1 -> phpbb3

Сообщение MyMan »

Вчера пытался исправить проблемы с кодировкой сообщений, что делал:

в sql файле базы старого форума менял все cp1251 на UTF8
сохранял sql в UTF8 в 3 разных редакторах: EditPlus, PSPad editor и UltraEdit
перегонял базу в UTF8 с помощью dumper (SypexDumperLite_108) менял там:

Код: Выделить всё

define('CHARSET', 'utf8');
define('RESTORE_CHARSET', 'forced->utf8'); и define('RESTORE_CHARSET', 'forced->utf8_bin');
Сопоставление соединения с MySQL: utf8_general_ci

Ничего не помогает. Самое главное что вобла даже после перегона в UTF8 видит все нормально, а phpbb 3.0.5 после конвертации базы, все заголовки и названия вдит нормально, а сами сообщения в топиках иероглифы. Поискал на форуме, не нашел похожего. Что может быть не так? Помогите уже 3 сутки мучаюсь с перегоном базы.
Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 17272
Стаж: 20 лет 4 месяца
Откуда: Красноярск
Благодарил (а): 632 раза
Поблагодарили: 2412 раз

Re: Ковертор БД Vbulletin 3.7.1 -> phpbb3

Сообщение rxu »

MyMan
Трудно сказать зачем, но в конверторе в install/convertors/functions_vb30.php дважды объявлена функция

Код: Выделить всё

function phpbb_set_encoding($text, $grab_user_lang = true)
Причем первая возвращает текст без изменений (не перекодирует).
Во второй "жестко" забита кодировка

Код: Выделить всё

$db_character_set = 'iso-8859-1';
Я бы посоветовал первое объявление вообще удалить или закомментировать, в оставшемся задать нужную вам кодировку в соответствии с исходной кодировкой БД (очевидно, 'windows-1251' или 'cp1251' - надо проверять).
Изображение
MyMan
phpBB 1.2.0
Сообщения: 14
Стаж: 17 лет 3 месяца
Поблагодарили: 2 раза

Re: Ковертор БД Vbulletin 3.7.1 -> phpbb3

Сообщение MyMan »

rxu

первая у меня была изначально удалена. А во второй ставил и windows-1251 и cp1251 безуспешные иероглифы и опять только в сообщениях. Но есть прогресс, теперь колличество иероглифов больше напоминают исходные сообщения:) Раньше даже самые большие сообщения отображались ввиде нескольких символов, а теперь иероглифов стало больше:)

Добавлено спустя 19 минут 27 секунд:
rxu

УРАААА!!!!! Спасибо вам огромное, что натолкнули в нужное место. У меня же БД была в UTF8 сконвертирована. Там надо было не cp1251, а UTF-8 поставить (ибо исходик то уже в новой кодировке был). И все стало ОК. База встала. Все отлично. Все работает.

Всем огромное спасибо. Рад, что ушел с Воблы ибо поддерживать лицензию, за форум, в котором половина (если не больше) функционала толком простаивает смысла нет, как и покупать пожизненную, и вернулся на phpbb 4 года спустя. Все равно 90% форума, это общение в топиках. А в плане безопасности: когда надо ломают все, здесь не перестрахуешся. Есть хороший коньяк, а есть дорогой коньяк. Но это мое ИМХО:)
MyMan
phpBB 1.2.0
Сообщения: 14
Стаж: 17 лет 3 месяца
Поблагодарили: 2 раза

Re: Ковертор БД Vbulletin 3.7.1 -> phpbb3

Сообщение MyMan »

Здравствуйте!

После конвертирования с форума Vbulletin 3.7.1 в phpbb3.0.5 появилась проблема. Пользователь регистрируется, но войти после регистрации на форум не может. Пробовал менять пароль через админпанель и опять входить под новым паролем, пишет что пароль неверный. В настройках регистрации все верно. Активация отключена. Что может быть не так???
MyMan
phpBB 1.2.0
Сообщения: 14
Стаж: 17 лет 3 месяца
Поблагодарили: 2 раза

Re: Ковертор БД Vbulletin 3.7.1 -> phpbb3

Сообщение MyMan »

Проблема в Auth_db как я понимаю, у конвертора и форума они разные:

Auth_db (исходника форума):

Код: Выделить всё

<?php
/**
* Database auth plug-in for phpBB3
*
* Authentication plug-ins is largely down to Sergey Kanareykin, our thanks to him.
*
* This is for authentication via the integrated user table
*
* @package login
* @version $Id: auth_db.php 9312 2009-02-06 14:51:26Z Kellanved $
* @copyright (c) 2005 phpBB Group
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
*
*/

/**
* @ignore
*/
if (!defined('IN_PHPBB'))
{
	exit;
}

/**
* Login function
*/
function login_db(&$username, &$password)
{
	global $db, $config;

	// do not allow empty password
	if (!$password)
	{
		return array(
			'status'	=> LOGIN_ERROR_PASSWORD,
			'error_msg'	=> 'NO_PASSWORD_SUPPLIED',
			'user_row'	=> array('user_id' => ANONYMOUS),
		);
	}

	if (!$username)
	{
		return array(
			'status'	=> LOGIN_ERROR_USERNAME,
			'error_msg'	=> 'LOGIN_ERROR_USERNAME',
			'user_row'	=> array('user_id' => ANONYMOUS),
		);
	}

	$sql = 'SELECT user_id, username, user_password, user_passchg, user_pass_convert, user_email, user_type, user_login_attempts
		FROM ' . USERS_TABLE . "
		WHERE username_clean = '" . $db->sql_escape(utf8_clean_string($username)) . "'";
	$result = $db->sql_query($sql);
	$row = $db->sql_fetchrow($result);
	$db->sql_freeresult($result);

	if (!$row)
	{
		return array(
			'status'	=> LOGIN_ERROR_USERNAME,
			'error_msg'	=> 'LOGIN_ERROR_USERNAME',
			'user_row'	=> array('user_id' => ANONYMOUS),
		);
	}

	// If there are too much login attempts, we need to check for an confirm image
	// Every auth module is able to define what to do by itself...
	if ($config['max_login_attempts'] && $row['user_login_attempts'] >= $config['max_login_attempts'])
	{
		$confirm_id = request_var('confirm_id', '');
		$confirm_code = request_var('confirm_code', '');

		// Visual Confirmation handling
		if (!$confirm_id)
		{
			return array(
				'status'		=> LOGIN_ERROR_ATTEMPTS,
				'error_msg'		=> 'LOGIN_ERROR_ATTEMPTS',
				'user_row'		=> $row,
			);
		}
		else
		{
			global $user;

			$sql = 'SELECT code
				FROM ' . CONFIRM_TABLE . "
				WHERE confirm_id = '" . $db->sql_escape($confirm_id) . "'
					AND session_id = '" . $db->sql_escape($user->session_id) . "'
					AND confirm_type = " . CONFIRM_LOGIN;
			$result = $db->sql_query($sql);
			$confirm_row = $db->sql_fetchrow($result);
			$db->sql_freeresult($result);

			if ($confirm_row)
			{
				if (strcasecmp($confirm_row['code'], $confirm_code) === 0)
				{
					$sql = 'DELETE FROM ' . CONFIRM_TABLE . "
						WHERE confirm_id = '" . $db->sql_escape($confirm_id) . "'
							AND session_id = '" . $db->sql_escape($user->session_id) . "'
							AND confirm_type = " . CONFIRM_LOGIN;
					$db->sql_query($sql);
				}
				else
				{
					return array(
						'status'		=> LOGIN_ERROR_ATTEMPTS,
						'error_msg'		=> 'CONFIRM_CODE_WRONG',
						'user_row'		=> $row,
					);
				}
			}
			else
			{
				return array(
					'status'		=> LOGIN_ERROR_ATTEMPTS,
					'error_msg'		=> 'CONFIRM_CODE_WRONG',
					'user_row'		=> $row,
				);
			}
		}
	}

	// If the password convert flag is set we need to convert it
	if ($row['user_pass_convert'])
	{
		// in phpBB2 passwords were used exactly as they were sent, with addslashes applied
		$password_old_format = isset($_REQUEST['password']) ? (string) $_REQUEST['password'] : '';
		$password_old_format = (!STRIP) ? addslashes($password_old_format) : $password_old_format;
		$password_new_format = '';

		set_var($password_new_format, stripslashes($password_old_format), 'string');

		if ($password == $password_new_format)
		{
			if (!function_exists('utf8_to_cp1252'))
			{
				global $phpbb_root_path, $phpEx;
				include($phpbb_root_path . 'includes/utf/data/recode_basic.' . $phpEx);
			}

			// cp1252 is phpBB2's default encoding, characters outside ASCII range might work when converted into that encoding
			// plain md5 support left in for conversions from other systems.
			if ((strlen($row['user_password']) == 34 && (phpbb_check_hash(md5($password_old_format), $row['user_password']) || phpbb_check_hash(md5(utf8_to_cp1252($password_old_format)), $row['user_password'])))
				|| (strlen($row['user_password']) == 32  && (md5($password_old_format) == $row['user_password'] || md5(utf8_to_cp1252($password_old_format)) == $row['user_password'])))
			{
				$hash = phpbb_hash($password_new_format);

				// Update the password in the users table to the new format and remove user_pass_convert flag
				$sql = 'UPDATE ' . USERS_TABLE . '
					SET user_password = \'' . $db->sql_escape($hash) . '\',
						user_pass_convert = 0
					WHERE user_id = ' . $row['user_id'];
				$db->sql_query($sql);

				$row['user_pass_convert'] = 0;
				$row['user_password'] = $hash;
			}
			else 
			{
				// Although we weren't able to convert this password we have to
				// increase login attempt count to make sure this cannot be exploited
				$sql = 'UPDATE ' . USERS_TABLE . '
					SET user_login_attempts = user_login_attempts + 1
					WHERE user_id = ' . $row['user_id'];
				$db->sql_query($sql);

				return array(
					'status'		=> LOGIN_ERROR_PASSWORD_CONVERT,
					'error_msg'		=> 'LOGIN_ERROR_PASSWORD_CONVERT',
					'user_row'		=> $row,
				);
			}
		}
	}

	// Check password ...
	if (!$row['user_pass_convert'] && phpbb_check_hash($password, $row['user_password']))
	{
		// Check for old password hash...
		if (strlen($row['user_password']) == 32)
		{
			$hash = phpbb_hash($password);

			// Update the password in the users table to the new format
			$sql = 'UPDATE ' . USERS_TABLE . "
				SET user_password = '" . $db->sql_escape($hash) . "',
					user_pass_convert = 0
				WHERE user_id = {$row['user_id']}";
			$db->sql_query($sql);

			$row['user_password'] = $hash;
		}

		if ($row['user_login_attempts'] != 0)
		{
			// Successful, reset login attempts (the user passed all stages)
			$sql = 'UPDATE ' . USERS_TABLE . '
				SET user_login_attempts = 0
				WHERE user_id = ' . $row['user_id'];
			$db->sql_query($sql);
		}

		// User inactive...
		if ($row['user_type'] == USER_INACTIVE || $row['user_type'] == USER_IGNORE)
		{
			return array(
				'status'		=> LOGIN_ERROR_ACTIVE,
				'error_msg'		=> 'ACTIVE_ERROR',
				'user_row'		=> $row,
			);
		}

		// Successful login... set user_login_attempts to zero...
		return array(
			'status'		=> LOGIN_SUCCESS,
			'error_msg'		=> false,
			'user_row'		=> $row,
		);
	}

	// Password incorrect - increase login attempts
	$sql = 'UPDATE ' . USERS_TABLE . '
		SET user_login_attempts = user_login_attempts + 1
		WHERE user_id = ' . $row['user_id'];
	$db->sql_query($sql);

	// Give status about wrong password...
	return array(
		'status'		=> LOGIN_ERROR_PASSWORD,
		'error_msg'		=> 'LOGIN_ERROR_PASSWORD',
		'user_row'		=> $row,
	);
}

?>


Auth_db (конвертора)

Код: Выделить всё

<?php
/**
* Database auth plug-in for phpBB3
*
* Authentication plug-ins is largely down to Sergey Kanareykin, our thanks to him.
*
* This is for authentication via the integrated user table
*
* @package login
* @version $Id: auth_db.php,v 1.21 2007/05/14 20:08:11 naderman Exp $
* @copyright (c) 2005 phpBB Group 
* @license http://opensource.org/licenses/gpl-license.php GNU Public License 
*
*/

/**
* Login function
*/
function login_db(&$username, &$password)
{
	global $db, $config;

	$sql = 'SELECT user_id, username, user_password, user_passchg, user_pass_convert, user_email, user_type, user_login_attempts,salt 
		FROM ' . USERS_TABLE . "
		WHERE username_clean = '" . $db->sql_escape(utf8_clean_string($username)) . "'";
	$result = $db->sql_query($sql);
	$row = $db->sql_fetchrow($result);
	$db->sql_freeresult($result);

	if (!$row)
	{
		return array(
			'status'	=> LOGIN_ERROR_USERNAME,
			'error_msg'	=> 'LOGIN_ERROR_USERNAME',
			'user_row'	=> array('user_id' => ANONYMOUS),
		);
	}

	// If there are too much login attempts, we need to check for an confirm image
	// Every auth module is able to define what to do by itself...
	if ($config['max_login_attempts'] && $row['user_login_attempts'] >= $config['max_login_attempts'])
	{
		$confirm_id = request_var('confirm_id', '');
		$confirm_code = request_var('confirm_code', '');

		// Visual Confirmation handling
		if (!$confirm_id)
		{
			return array(
				'status'		=> LOGIN_ERROR_ATTEMPTS,
				'error_msg'		=> 'LOGIN_ERROR_ATTEMPTS',
				'user_row'		=> $row,
			);
		}
		else
		{
			global $user;

			$sql = 'SELECT code
				FROM ' . CONFIRM_TABLE . "
				WHERE confirm_id = '" . $db->sql_escape($confirm_id) . "'
					AND session_id = '" . $db->sql_escape($user->session_id) . "'
					AND confirm_type = " . CONFIRM_LOGIN;
			$result = $db->sql_query($sql);
			$confirm_row = $db->sql_fetchrow($result);
			$db->sql_freeresult($result);

			if ($confirm_row)
			{
				if (strcasecmp($confirm_row['code'], $confirm_code) === 0)
				{
					$sql = 'DELETE FROM ' . CONFIRM_TABLE . "
						WHERE confirm_id = '" . $db->sql_escape($confirm_id) . "'
							AND session_id = '" . $db->sql_escape($user->session_id) . "'
							AND confirm_type = " . CONFIRM_LOGIN;
					$db->sql_query($sql);
				}
				else
				{
					return array(
						'status'		=> LOGIN_ERROR_ATTEMPTS,
						'error_msg'		=> 'CONFIRM_CODE_WRONG',
						'user_row'		=> $row,
					);
				}
			}
			else
			{
				return array(
					'status'		=> LOGIN_ERROR_ATTEMPTS,
					'error_msg'		=> 'CONFIRM_CODE_WRONG',
					'user_row'		=> $row,
				);
			}
		}
	}

	// If the password convert flag is set we need to convert it
	if ($row['user_pass_convert'])
	{
		// in phpBB2 passwords were used exactly as they were sent, with addslashes applied
		$password_old_format = isset($_REQUEST['password']) ? (string) $_REQUEST['password'] : '';
		$password_old_format = (!STRIP) ? addslashes($password_old_format) : $password_old_format;
		$password_new_format = '';

		set_var($password_new_format, stripslashes($password_old_format), 'string');

		if ($password == $password_new_format)
		{
			if (!function_exists('utf8_to_cp1252'))
			{
				global $phpbb_root_path, $phpEx;
				include($phpbb_root_path . 'includes/utf/data/recode_basic.' . $phpEx);
			}

			// cp1252 is phpBB2's default encoding, characters outside ASCII range might work when converted into that encoding
			if (md5($password_old_format) == $row['user_password'] || md5(utf8_to_cp1252($password_old_format)) == $row['user_password'])
			{
				// Update the password in the users table to the new format and remove user_pass_convert flag
				$sql = 'UPDATE ' . USERS_TABLE . '
					SET user_password = \'' . $db->sql_escape(md5($password_new_format)) . '\',
						user_pass_convert = 0
					WHERE user_id = ' . $row['user_id'];
				$db->sql_query($sql);

				$row['user_pass_convert'] = 0;
				$row['user_password'] = md5($password_new_format);
			}
			else
			{
				// Although we weren't able to convert this password we have to
				// increase login attempt count to make sure this cannot be exploited
				$sql = 'UPDATE ' . USERS_TABLE . '
					SET user_login_attempts = user_login_attempts + 1
					WHERE user_id = ' . $row['user_id'];
				$db->sql_query($sql);

				return array(
					'status'		=> LOGIN_ERROR_PASSWORD_CONVERT,
					'error_msg'		=> 'LOGIN_ERROR_PASSWORD_CONVERT',
					'user_row'		=> $row,
				);
			}
		}
	}

	// Check password ...
	// added for vb3 conversion
	if (!$row['user_pass_convert'] && (md5($password) == $row['user_password']
		 or md5(md5($password).$row['salt'])==$row['user_password'])) 
	{
		if (md5($password)!=$row['user_password'])
		{
			// Unconverted password
			$sql = 'UPDATE ' . USERS_TABLE . '
				SET user_password = "'.md5($password).'" 
				WHERE user_id = ' . $row['user_id'];
			$db->sql_query($sql);
		}

		if ($row['user_login_attempts'] != 0)
		{
			// Successful, reset login attempts (the user passed all stages)
			$sql = 'UPDATE ' . USERS_TABLE . '
				SET user_login_attempts = 0
				WHERE user_id = ' . $row['user_id'];
			$db->sql_query($sql);
		}

		// User inactive...
		if ($row['user_type'] == USER_INACTIVE || $row['user_type'] == USER_IGNORE)
		{
			return array(
				'status'		=> LOGIN_ERROR_ACTIVE,
				'error_msg'		=> 'ACTIVE_ERROR',
				'user_row'		=> $row,
			);
		}

		// Successful login... set user_login_attempts to zero...
		return array(
			'status'		=> LOGIN_SUCCESS,
			'error_msg'		=> false,
			'user_row'		=> $row,
		);
	}

	// Password incorrect - increase login attempts
	$sql = 'UPDATE ' . USERS_TABLE . '
		SET user_login_attempts = user_login_attempts + 1
		WHERE user_id = ' . $row['user_id'];
	$db->sql_query($sql);

	// Give status about wrong password...
	return array(
		'status'		=> LOGIN_ERROR_PASSWORD,
		'error_msg'		=> 'LOGIN_ERROR_PASSWORD',
		'user_row'		=> $row,
	);
}

?>
Дело в том, что когда стоит одна, то вновьзарегистрировавшиеся пользователи успешно заходят на форум. Но не могут зайти те, кто был зарегистрирован в Вобле. И наоборот когда стоит другая, могут зайти те кто был в Вобле зарегин и не могут те кто регистрировался уже на phpbb. Помогите разобраться.
MyMan
phpBB 1.2.0
Сообщения: 14
Стаж: 17 лет 3 месяца
Поблагодарили: 2 раза

Re: Ковертор БД Vbulletin 3.7.1 -> phpbb3

Сообщение MyMan »

ИНСТРУКЦИЯ ПО КОНВЕРТИРОВАНИЮ VBULLETIN 3.7 И ВЫШЕ В PHPBB 3.0.X

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

1) перевод кодировки вашей базы в UTF-8 (на случай если ваша база в другой кодировке):
  • Если база вашего VBULLETIN была в кодировке cp1251 или какой-либо другой, то вам необходимо сначала изменить кодировку вашей базы на UTF-8, для этого сделайте бекап базы в файл sql (для этого лучше всего воспользоваться скриптом dumper.php Sypex Dumper Lite, инструкция по установке внутри).
  • После того как вы получили sql файл базы вашего форума, воспользуйтесь редактором Edit Plus 2 (он самый быстрый в работе с большими файлами, на тот случай если у вас большая база). В нем, в разделе поиск -> заменить установите найти: cp1251 (или кодировку вашей базы) и заменить на: utf8. И запустите поиск и замену. После того как он заменит все значения выберите файл -> сохранить как в названии измените название на нужное в конце допишите .sql в кодировке выбирите UTF-8. Сохраните. Все ваша база готова.
2) конвертирование
  • в файле конвертора functions_vb30.php

    НАЙТИ:

    Код: Выделить всё

    $encoding = 'ISO-8859-1';
    ЗАМЕНИТЬ НА:

    Код: Выделить всё

    $encoding = 'utf-8';
  • создайте в корне вашего локального сервера 2 папки: forum и forums. В папку forum поместите исходник phpbb3.0.x (с вложенными для конвертирования файлами - конвертором - где скачать см. внизу сообщения), в папку forums скопируйте файлы вашего форума (vbulletin).
  • залейте sql файл базы вашего vbulletina в базу вашей локальной машины с помощью dumper.php (помните установку phpbb 3.0.x необходимо будет производить в эту же базу) в коде которого:
    НАЙТИ:

    Код: Выделить всё

    // Можно также указывать сравнение нужное к примеру 'cp1251_ukrainian_ci' или 'forced->cp1251_ukrainian_ci'
    define('RESTORE_CHARSET', 'cp1251');
    ЗАМЕНИТЬ НА:

    Код: Выделить всё

    // Можно также указывать сравнение нужное к примеру 'cp1251_ukrainian_ci' или 'forced->cp1251_ukrainian_ci'
    define('RESTORE_CHARSET', 'forced->utf8');
  • запустите установку phpbb 3.0.x и установите его в ту же базу в которую вы ставили базу воблы из пункта выше. не спешите заканчивать установку! когда увидите конечную страницу установки нажмите там конвертирование и выбирите второй конвертор (который конвертирует vBulletin в phpbb) и запустите его. Если все нормально, то конвертирование пройдет удачно и форум сконвертируется.
3) возможные ошибки:
  • если вы увидели ошибку с примерным текстом:

    Код: Выделить всё

    SQL ERROR [ mysql4 ]
    
    Unknown column 'userfield.field2' in 'field list' [1054]
    
    SQL
    
    SELECT user.userid, user.userid AS poster_id, user.usergroupid, user.ipaddress, user.salt, user.joindate, user.username, user.password, user.posts, user.email, user.birthday, user.lastvisit, user.lastactivity, user.timezoneoffset, userfield.field2, userfield.field3, userfield.field4, user.homepage, user.msn, user.yahoo, user.aim, user.icq, user.customtitle, avatar.avatarpath, user.pmunread, user.emailstamp, user.autosubscribe, usertextfield.signature, user.joindate AS post_time FROM ((forumuser user LEFT JOIN forumuserfield AS userfield ON user.userid = userfield.userid) LEFT JOIN forumusertextfield AS usertextfield on user.userid=usertextfield.userid) LEFT JOIN forumavatar AS avatar on user.avatarid=avatar.avatarid WHERE (user.userid <> -1) ORDER BY user.userid LIMIT 2000
    
    BACKTRACE
    
    FILE: includes/db/mysql.php
    LINE: 174
    CALL: dbal->sql_error()
    
    FILE: includes/db/mysql.php
    LINE: 221
    CALL: dbal_mysql->sql_query()
    
    FILE: includes/db/dbal.php
    LINE: 170
    CALL: dbal_mysql->_sql_query_limit()
    
    FILE: install/install_convert.php
    LINE: 1233
    CALL: dbal->sql_query_limit()
    
    FILE: install/install_convert.php
    LINE: 203
    CALL: install_convert->convert_data()
    
    FILE: install/index.php
    LINE: 405
    CALL: install_convert->main()
    
    FILE: install/index.php
    LINE: 282
    CALL: module->load()
    то в файле convert_vb30.php конвертора найдите строки:

    НАЙДИТЕ И УДАЛИТЕ:

    Код: Выделить всё

    array('user_from',            'userfield.field2',               array('function1' => 'phpbb_set_encoding')),
    

    Код: Выделить всё

    array('user_interests',         'userfield.field3',            array('function1' => 'phpbb_set_encoding')),
    

    Код: Выделить всё

    array('user_occ',            'userfield.field4',               array('function1' => 'phpbb_set_encoding')),
    
  • так же может быть ошибка где форум вам скажет, что при конвертировании обнаружены конфликтыне имена пользователей, их имена надо будет поменять, а после конвертирования вернуть на прежние.
ВНИМАНИЕ ЕСЛИ ПРИ КОНВЕРТИРОВАНИИ ВЫСКАКИВАЕТ ОШИБКА НЕОБХОДИМО УСТРАНИТЬ ЕЕ ПРИЧИНУ И ПРОДЕЛАТЬ УСТАНОВКУ И КОНВЕРТИРОВАНИЕ ЗАНОВО, ПЕРЕД ЭТИМ УДАЛИВ ТАБЛИЦЫ PHPBB_ ПРЕЖНЕЙ УСТАНОВКИ ИЗ БАЗЫ!!!

СКАЧАТЬ НАИБОЛЕЕ СВЕЖИЙ НА СЕГОДНЯ КОНВЕРТОР МОЖНО:
ТУТ
andreyjkee
phpBB 1.0.0
Сообщения: 9
Стаж: 16 лет 8 месяцев
Откуда: Воронеж
Благодарил (а): 1 раз

Re: Ковертор БД Vbulletin 3.7.1 -> phpbb3

Сообщение andreyjkee »

Кто нибудь может объяснить, вложения булки после конвертации чтоли остаются в папке булки customattachments? (У меня вложения хранились не в бд, а в файловой системе)
И еще после конвертирования пропали аватары :shock: (тоже хранятся в файловой системе)
В личном разделе аватары отображаются, в сообщениях нет...

Добавлено спустя 7 минут 52 секунды:
С аватарами разобрался. Оказывается они в phpbb по умолчанию отключены были ))

Вернуться в «Поддержка phpBB 3.0.х»