Оновлення форуму 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'
> 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 потрібно змінити, щоб оновлення пройшло успішно. Припустимо тепер він виглядає так
Нам необхідно вказати кодування з'єднання з базою даних, що б її зрозумів новий форум. Для цього після рядка
Можна видалити за непотрібністю.

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

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

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

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

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

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

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

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

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