Перейти к содержимому

 Друзья: Всё для вебмастера | [ Реклама на форуме ]


Rutor
Rutor


[ DDos Услуги. DDos атака. Заказать ДДос ]


Проблемы с кодировкой при обновлении с IPB 2.3.6 на 3.х


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 2

#1
$iD

$iD

    Админ

  • root
  • PipPipPipPipPipPip
  • 3785 сообщений
Доброе время суток дорогие читатели этого поста. Если вы нашли эту тему, значит вы столкнулись с такими же проблемами при переходе с IPB версии 2.3.6 на 3.х. Я очень долго не мог понять, почему я не могу просто проапгрейдить движок. постоянно выдавало неправильную кодировку. Вид у нее был такой:

Изображение

Не буду вас томить.
Дело было в том, что в БД информация закодирована двумя кодировками, сначала в latin1, а потом cp1251 (а всё из-за того что когда-то, когда я был зелен и юн, я накосячил при установки IPB, сам того не подозревая). Так вот, о том как же исправить сей досадный ляп будет написано ниже. Перед тем как приступить ОБЯЗАТЕЛЬНО сделаейте бэкап вашей базы (на всякий случай, потому что как известно случаи бывают разные).

Приступим пожалуй:

1. Для начала необходимо изменить utf8 кодировку для всех таблиц. Это можно сделать ручками, выполнив команду:
ALTER TABLE`ibf_posts` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci, CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
Для каждой таблицы сделать такой запрос (можно сделать сразу всё в phpMyAdmin).
Но! Но мы ведь вам не хочется писать это для каждой таблицы? Если да, то специально для таких был написан простейший скрипт на php полностью автоматизирующий эту процедуру:
<?php
// Database info
include("conf_global.php");
$dbhost = $INFO['sql_host'];
$dbuser = $INFO['sql_user'];
$dbpass = $INFO['sql_pass'];
$dbname = $INFO['sql_database'];
//---------------
header('Content-type: text/plain');
$dbconn = mysql_connect($dbhost, $dbuser, $dbpass) or die( mysql_error() );
$db = mysql_select_db($dbname) or die( mysql_error() );
$sql = "ALTER DATABASE `".$dbname."` DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci";
$result = mysql_query($sql) or die( mysql_error() );
print "Database changed to UTF-8.\n";
$sql = 'SHOW TABLES';
$result = mysql_query($sql) or die( mysql_error() );
while ( $row = mysql_fetch_row($result) )
{
$table = mysql_real_escape_string($row[0]);
$sql = "ALTER TABLE $table DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci, CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci";
mysql_query($sql) or die( mysql_error() );
print "$table changed to UTF-8.\n";
}
mysql_close($dbconn);
?>
Копируем это, создаем файл, к примеру, 1.php и закидываем в папку с форумом. Теперь запускаем его xttp://ваш_форум/1.php. И смотрим как скрипт меняет кодировку на utf8.

2. Следующим этапом будет восстановление правильной кодировки для вашей базы данных.
На данном этапе необходимо экспортировать базу данных (можно сделать средствами phpMyAdmin, sypex Dumper или же ручками через SSH). После того как база сохранена, воспользуемся замечательной утилитой iconv (для тех кому интересно могут почитать о ней в интернете).

С помощью этой утилиты необходимо сделать двойное преобразование кодировки:
iconv -c -f utf8 -t latin1 your_DB.sql > test
iconv -f cp1251 -t utf8 test > final
Ну вот и всё. Кодировка успешно сменилась на правильную. Осталось только импортировать базу обратно, любыми средствами (phpMyAdmin, sypex Dumper или же ручками через SSH).


3. Если при обновлении у вас не такая ошибка, то просто воспользуйтесь подробным мануалом по обновлению до 3 версии.


На этом всё.

#2
ReXX

ReXX

    Бит

  • Members
  • 1 сообщений
Не получается обновиться с 2.3.3 на 3.2.3

На этапе "Приложения" (Опции обновления: IP.Board 3.0.0 Beta 2) жму "Далее", затем белый экран.

Все сделал, как написано здесь ]]>http://wiki.iblink.ru/ipb3/upgrade]]>

Лог ошибок находится здесь /cache/sql_error_latest.cgi ?

Хоть подскажите где копать!

#3
$iD

$iD

    Админ

  • root
  • PipPipPipPipPipPip
  • 3785 сообщений
ReXX
да, давайте лог.


Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных