Оновлення форуму ipb 2

Оновлення форуму ipb 2

Оновлення форуму ipb 2.x до останньої версії повинна здійснюватися через перехід на версію 3, з подальшим оновленням вже третин версії. Я для переходу на 3ю версію використовував дистрибутив IP.Board 3.0.5 який можна знайти в інтернеті. Перед будь-яким оновленням перевіряємо чи відповідає хостинг на якому встановлений форум вимогам нової версії і обов'язково робимо бекап файлів і бази даних форуму. Вимоги для ipb3.0.5 я наводжу нижче.

Вимоги для IP.Board 3 наступні:
1. PHP версії 5.1.х і вище
2. Модулі розширення PHP:

• dom
• gd
• iconv
• libxml
• mbstring
• mysqli або mysql
• Reflection
• SimpleXML
• SPL

3. Вкрай бажано наявність наступних модулів:

• json
• sockets
• sphinx
• XCache або APC

4. Пам'яті виділеної для PHP (значення memory_limit) має бути не менше 32Мб, ідеально 128Мб.

Перекодування бази даних

Основна ідея перекодування бази
У нас є резервна копія бази в файлі. Це простий текст в кодуванні windows-1251 (cp1251). Для того щоб перевести цей текст в UTF-8, необхідно скористатися функцією перекодування Notepad ++ (Кодування - перетворити в UTF-8).

Після того як текст переведений в UTF-8, необхідно поправити інструкції в цьому тексті, щоб сама база працювала з ним як з UTF-8. А саме є дві команди SET NAMES і DEFAULT CHARSET. На базі cp1251 вони виглядають так

SET NAMES cp1251

) ENGINE = MyISAM DEFAULT CHARSET = cp1251

В нашій резервної копії таких команд більше ніж дві. Значить нам потрібно їх замінити у всьому файлі на

) ENGINE = MyISAM DEFAULT CHARSET = utf8

Перекодування засобами SSH
Скористаємося утилітою iconv для перетворення нашої резервної копії (яку ми робили на першому кроці), робиться це так:

> Iconv -f cp1251 -t utf8 dump.sql> dump.utf8

Призначення ключів наступне:
-f cp1251 - конвертувати з кодування cp1251
-t utf8 - в кодування utf8
dump.sql - файл який треба конвертувати
> Dump.utf8 - результати конвертації запишуться сюди

Можлива поява проблем при конвертації, які перервуть процес конвертації. Це як правило відбувається через неможливість знайти відповідність символів одного кодування в символи інший. У таких випадках варто додати ще один ключ (-c) в виклик iconv. Тобто команда буде виглядати вже так:

> Iconv -c -f cp1251 -t utf8 dump.sql> dump.utf8

В цьому випадку при виникненні проблеми при конвертації, символ буде пропущено, а конвертування продовжиться.

Отже весь текст у нас переведений в UTF-8, тепер необхідно змінити команди SQL. Робиться це так

Власне так як дамп у нас повинен бути в правильній cp1251 кодуванні, то робимо заміну в файлі цих значень на нові:

> Sed 's / SET NAMES cp1251 / SET NAMES utf8 / g' 1.dump.utf8
> Sed 's / DEFAULT CHARSET = cp1251 / DEFAULT CHARSET = utf8 / g' <1.dump.utf8> dump.utf8.sql

Дану команду наочно описати з українськими значеннями:

sed 's / БУЛО / СТАЛО / g' <ОТКУДА НовомосковскЕМ> куди записує

Перекодування підготовленим SypexDumper

В директорії Tools дистрибутива ми розташували скрипт зміненого SypexDumper, який вже налаштований на роботу з базою вашого форуму. Необхідно закачати даний скрипт в кореневу директорію форуму на сервері і запустити.

Вводите дані для доступу до бази форуму в першому вікні.

У наступному вікні вам буде запропоновано зробити дамп бази і відновити базу з резервної копії.

Робите дамп бази. Після завершення dumper напише, що резервна копія готова і дасть посилання на її скачування. Завантажувати не треба. Просто заходимо по FTP на сервер форуму і переконуємося, що копія дійсно зроблена і знаходиться в директорії cache. Ви можете завантажити цей дамп до себе на комп'ютер. Запам'ятайте ім'я файлу резервної копії.

Повертаємося до форми дампера з якої ви почали робити резервну копію. Тепер в ньому необхідно вибрати відновлення бази.
У першому списку, що випадає вибираєте вашу базу даних, у другому - назва файлу резервної копії. Запускаєте відновлення.

Після того як відновлення буде завершено. За допомогою phpMyAdmin або схожого по можливості інструменту, перевіряєте, що все таблиці тепер мають порівняння utf8_general_ci, і всі дані всередині таблиць нормально відображаються.

Відновлення нової бази даних

Наша база сконвертовано і готова до оновлення. Однак її ще треба відновити на сервері MySQL.
Спочатку необхідно поміняти кодування старої бази.

> Mysql -u db_user -p db_forum -e 'ALTER DATABASE db_forum DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci'
Enter password:
>

У будь-якому доступному інтерфейсі для роботи з базою даних (наприклад, phpMyAdmin) перейти в базу форуму і виконати запит

ALTER DATABASE db_forum DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci

Замість db_forum має бути назва ваше бази!

Тепер розгорнемо базу. Робиться це так:

> Mysql -u db_user -p -default-character-set = utf8 db_forum <./dump.utf8.sql
Enter password:
>

Відновлювати краще SypexDumper. Закидаєте конвертувати резеврную копію в директорію, куди SypexDumper зберігає резервні копії баз. І запускаєте SypexDumper. Уважно прямуєте інструкцій

Дамп розгорнуть, кодування бази utf8, база готова для поновлення.

Завантаження нових файлів

Кодування бази даних ми поміняли на UTF-8, тепер необхідно закачати нові файли форма на сервер. Для цього на початку розберемося зі старими. Частина з них нам більше вже не знадобитися. Тому видаляємо все директорії і файли з нашого форуму крім наступних:

/ uploads
./ style_images
./ style_emoticons
./ style_captcha
./ style_avatars
./conf_global.php
./ cache

Тепер беремо заздалегідь скачаний дистрибутив форуму, і всі файли і директорії з папки upload закачуємо на сервер за допомогою FTP-клієнта. Має вийти так

/xml.php
./ uploads
./ style_images
./ style_emoticons
./ style_captcha
./ style_avatars
./robotstxt.txt
./ retail
./ public
./ lofiversion
./ ips_kernel
./ interface
./initdata.php
./index.php
./ hooks
./favicon.ico
./ converge_local
./conf_global.php
./ cache
./ admin

Тепер потрібно перевірити, що всі права на директорії розставлені правильно. IP.Board 3 вимагає записи в наступні директорії

/ cache
./ Cache / tmp
./ Cache / lang_cache
./ Cache / lang_cache / 1
./ Cache / skin_cache
./ Public / style_images
./ Public / style_css
./ hooks
./ uploads

І файл ./conf_global.php

Для того щоб не було проблем виставляємо цим теки та файлу CHMOD 777 (rwxrwxrwx).

Підготовка до оновлення

Кодування в conf_global.php
Ваш старий conf_global потрібно змінити, щоб оновлення пройшло успішно. Припустимо тепер він виглядає так

Нам необхідно вказати кодування з'єднання з базою даних, що б її зрозумів новий форум. Для цього після рядка

Можна видалити за непотрібністю.

Оновлення форуму ipb 2

Відбудеться перевірка системних вимог, якщо наш хостинг відповідає вимогам форуму і всюди відобразилися зелені написи «Є» тиснемо «Далі».

Оновлення форуму ipb 2

На вкладки «Додатки» ми бачимо яка версія форуму до якої оновитися. У моєму випадку IP.Board 2.3.1 оновлюється до 3.0.5. Тиснемо «Далі».

Оновлення форуму ipb 2

У наступному вікні я залишаю всі пункти в неактивному стані і тисну «Далі».


У наступному вікні я ставлю галочку навпроти рядка «Показувати SQL запити для запуску вручну». Пов'язано це з тим, що при оновленні форуму до версії 3 йдуть запити до БД виду «TYPE = MyISAM», що не працюватиме в MySQL версії 5.5 і вище, т.к змінився синтаксис. При виконанні подібних запитів в нових версіях MySQL необхідно «TYPE = MyISAM» замінювати на «ENGINE = MyISAM». А оскільки на момент поновлення у мене на сервері працювала MySQL 5.5.22, мені довелося руками в запитах до БД підміняти «TYPE = MyISAM» на «ENGINE = MyISAM». Отже почнемо оновлення, натиснувши «Почати оновлення».

Оновлення форуму ipb 2

З'являються sql запити які я буду виконувати в phpmyadmin підміняючи «TYPE = MyISAM» на «ENGINE = MyISAM».

Оновлення форуму ipb 2

Періодично скрипт поновлення проситиме натиснути кнопку для продовження оновлення.

Оновлення форуму ipb 2

Закінчиться оновлення повідомленням як показано нижче.

Оновлення форуму ipb 2

Можливі помилки після поновлення

Буває так, що після поновлення, зайшовши на сторінку форуму, ви бачите щось подібне:

Оновлення форуму ipb 2

Проблема в тому, що вибирається неправильна кодування для сторінок. Перевірте в АЦ параметр Кодування сторінок форуму (АЦ → Системні настройки → Установки серверного оточення → Кодування сторінок форуму) він повинен містити значення utf-8.

AddDefaultCharset utf-8
AddCharset utf-8 *

CharsetSourceEnc utf-8
CharsetDefault utf-8

Оновлення форуму ipb 2

Причини може бути дві:
1. Ви забули змінити conf_global.php так, як я писав про це вище.
Спробуйте виконати ці зміни, якщо не допоможе уважно повторіть оновлення.
2. Ви конвертувати базу, яка вже була в UTF.
Виконайте оновлення, не дозволяйте перекодування бази (самого тексту), а тільки виконайте заміни команд SQL.