В раздел "Статьи" писать не могу, пишу сюда.
Потратил 6 часов на то чтобы без ошибок перевести форум с windows-1251 на utf8.
Сейчас я разберу все ошибки и проблемы, которые постигли меня и конечно же напишу решения.
Все производилось на ветке форума
3.8.х
ДАННЫЕ ДЕЙСТВИЯ НЕ СЛЕДУЕТ ПРОВОДИТЬ СРАЗУ НА РАБОЧЕМ САЙТЕ, ДЕЛАЙТЕ ВСЕ СНАЧАЛА НА ТЕСТОВОМ СЕРВЕРЕ или localhost
Хочу сказать что у вас не будет проблем при переходе на utf8 даже если атачи, аватарки хранятся в базе, не надо их перекидывать на файловую систему.
Начинаем:
Дамп базы необходимо делать с помощью
Sypex Dumper Lite 1.0.8. Там присутствует руководство по установке.
1) Заходим на dumper.php, вводим логин и пароль для доступа к бд.
2) Выбираем
Backup / Создание резервной копии БД, а так же БД форума
3) В
Фильтр таблиц пишем следующее
Code:
^*attachment, ^*customavatar, ^*customprofilepic, ^*picture, ^*socialgroupicon, ^*sigpic
Это как раз нужно для того чтобы не испортились наши аватарки и аттачи.
4) Метод сжатия Gzip, степень сжатия 7
5) Нажимаете "Применить" и собственно получаете дамп
6) Распакуем gzip архив
7) Сменим некоторые фразы в дампе
Code:
sed -i s/CHARSET=cp1251/CHARSET=utf8/g dump.sql
8) А теперь изменить кодировку файла
Code:
iconv -f cp1251 -t utf8 > utfdump.sql
Если вылезет ошибка iconv illegal, значит пункт 3 выполнен криво и в дамп залезли кривые символы из таблицы типа BLOB
9) Получим готовый дамп, копируем его на отдельный сервер где вы всё это тестите.
10) Опять возвращаемся на страницу dumper.php, повторяем пункт 1 и 2, но в
Фильтр таблиц пишем уже следующее:
Code:
*attachment, *customavatar, *customprofilepic, *picture, *socialgroupicon, *sigpic
Теперь мы дампим таблицы которые остались - аватарки. аттачи и т.п.
11) Дамп этих таблиц сделали, также разархивируем gzip и делаем
Code:
sed -i s/CHARSET=cp1251/CHARSET=utf8/g mini.sql
10) Новые дампы готовы.
ДАЛЕЕ ВЫ ВСЁ ДОЛЖНЫ ДЕЛАТЬ НА ТЕСТОВОМ СЕРВЕРЕ
12) Создаем новую базу данных куда будем заливать наши дампы, допустим с именем `utfforum`.
13) Загрузить без ошибок большой файл базы своего форума через SypexDumper у меня не получилось, поэтому буду рассказывать как дальше это делать через командную строку, остальные могут пропустить этот пункт.
14) Выполняем команду
Code:
mysql --user=USER --pass="PASSWORD" --host=localhost --default_character_set=utf8 utfforum < utfdump.sql
и второй дамп также
Code:
mysql --user=USER --pass="PASSWORD" --host=localhost --default_character_set=utf8 utfforum < mini.sql
Если дамп большой, то скорее всего увидите ошибку связанную с кешем.
Ползем в
/etc/mysql/my.cnf
меняем параметр max_allowed_packet на
Code:
max_allowed_packet = 256M
Выполняете команду
Code:
/etc/init.d/mysql restart
Ну и пробуем опять залить дамп.
15) Переходим в папку форума, меняем параметры в
includes/config.php
В начале файла после <?php ставим
PHP Code:
define('DISABLE_HOOKS', true);
дальше изменяете данные для подключения к базе
делаем параметры следующими:
PHP Code:
$config['Database']['force_sql_mode'] = true;
PHP Code:
$config['Mysqli']['charset'] = 'utf8';
16) Скачиваем чистый форум vB 3.8.x вашей ветки и из папки do_not_upload загружаем файл tools.php в папку администратора (admincp по умолчанию) и файлы из папки /upload/install/mysql-schema.php /upload/install/init.php закидываете в папку install (создайте её).
17) Заходите на форум по ссылке
http://site.com/admincp/tools.php
Нажимаем по пунктам:
Usergroup / Forum Cache
Options Cache
Bitfield Cache
а также
Reset board default language.
18) Дальше удаляем папку install и файл tools.php из папки админа.
19) Переходим в админку, скорей всего вы увидите хреновую кодировку, но ниче, в браузере выберите Вид->Кодировка->UTF-8
20) Выбираем пункт
Языки и Фразы, выбираете ваш язык - Редактировать настройки. В пункте
Набор символов HTML ставите
utf8-8
Сохраняете. Смотрите на сайт.
Если кодировка хреновая значит печальные настройки MySQL.. Делаем следующее:
Редактируем /etc/mysql/my.cnf
В конец файла дописываете
Code:
[mysqld]
character-set-server=utf8
character-sets-dir=/usr/share/mysql/charsets
default-character-set=utf8
init-connect="set names utf8"
[mysql]
character-sets-dir=/usr/share/mysql/charsets
default-character-set=utf8
[mysqladmin]
character-sets-dir=/usr/share/mysql/charsets
default-character-set=utf8
[mysqlcheck]
character-sets-dir=/usr/share/mysql/charsets
default-character-set=utf8
[mysqldump]
character-sets-dir=/usr/share/mysql/charsets
default-character-set=utf8
[mysqlimport]
character-sets-dir=/usr/share/mysql/charsets
default-character-set=utf8
[mysqlshow]
character-sets-dir=/usr/share/mysql/charsets
default-character-set=utf8
Выполняете команду
Code:
/etc/init.d/mysql restart
Далее удаляете только что созданную базу данных и продолжаете делать все с 14 пункта. На 20 пункте ваша кодировка будет utf-8!
Дальше удаляете из файла includes/config.php строку
Code:
define('DISABLE_HOOKS', true);
21) Переходите в админку - Продукты и модули - Управление продуктами.
Выключаете все продукты, после тог как выключили ВСЕ продукты, включаете по одному и после каждого включения хака, смотрите на главную страницу форума, если появляется какая-то ошибка, значит переустанавливаете хак заново.
На этом все!