Обновление форума IPB 2.x до версии 3 | Вебмастер DataLife Engine

Обновление форума 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Мб.

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

Первым этапом обновления ipb 2.x до ipb3 является этап перекодирования базы данных. Это очень важный этап. Если его выполнить неверно, дальнейшее обновление форума не будет иметь смысла. Существует несколько способов перекодирования: с помощью текстового редактора, командой iconv средствами SSH, утилитой SypexDumper входящую в состав форума ipb. Сам я использовал метод перекодирования через текстовый редактор. В качестве текстового редактора я использовал Notepad++.

Основная идея перекодирования базы
У нас есть резервная копия базы в файле. Это простой текст в кодировке 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

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

SET NAMES utf8

) 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’ < dump.utf8 > 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.
Сначала необходимо поменять кодировку старой базы.

При наличии SSH

>mysql -u db_user -p db_forum -e ‘ALTER DATABASE db_forum DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci’
Enter password:
>

При отсутствии SSH

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

ALTER DATABASE db_forum DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci

Вместо db_forum должно быть название ваше базы!

Теперь развернем базу. Делается это так:

При наличии SSH

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

При отсутствии SSH

Восстанавливать лучше 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 нужно изменить, чтобы обновление прошло успешно. Допустим сейчас он выглядит так

<?php
$INFO[‘sql_driver’]            =    ‘mysql’;
$INFO[‘sql_host’]            =    ‘server.mysql’;
$INFO[‘sql_database’]            =    ‘db_forum’;
$INFO[‘sql_user’]            =    ‘db_user’;
$INFO[‘sql_pass’]            =    ‘db_passw’;
$INFO[‘sql_tbl_prefix’]            =    ‘ibf_’;
$INFO[‘sql_debug’]            =    ‘1’;
$INFO[‘board_start’]            =    ‘1246400000’;
$INFO[‘installed’]            =    ‘1’;
$INFO[‘php_ext’]            =    ‘php’;
$INFO[‘safe_mode’]            =    ‘0’;
$INFO[‘board_url’]            =    ‘http://www.mydomain.ru/forum’;
$INFO[‘banned_group’]            =    ‘5’;
$INFO[‘admin_group’]            =    ‘4’;
$INFO[‘guest_group’]            =    ‘2’;
$INFO[‘member_group’]            =    ‘3’;
$INFO[‘auth_group’]            =    ‘1’;
$INFO[‘mysql_tbl_type’]            =    ‘MyISAM’;
$INFO[‘mysql_codepage’]            =    ‘cp1251’;

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

$INFO[‘sql_tbl_prefix’]            =    ‘ibf_’;

Добавляем

$INFO[‘sql_charset’]            =    ‘utf8’;

Строчку

$INFO[‘mysql_codepage’]            =    ‘cp1251’;

Можно удалить за ненадобностью.

Обновление

Теперь у нас все готово, чтобы запустить скрипт обновления. Заходите браузером на страницу http://mydomain.ru/f…/admin/upgrade/ и следуете указаниям мастера обновления.


Для начала обновления потребуется авторизация администратора форума, вводим логин и пароль и жмем «Далее».


Произойдет проверка системных требований, если наш хостинг соответствует требованиям форума и везде отобразились зеленые надписи «Есть» жмем «Далее».


На вкладки «Приложения» мы видим какая версия форума до какой обновиться. В моем случае 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.

Если все правильно, попробуйте создать файл .htaccess в корневой директории сервера, со следующим содержанием:

AddDefaultCharset utf-8
AddCharset utf-8 *
<IfModule mod_charset.c>
CharsetSourceEnc utf-8
CharsetDefault utf-8
</IfModule>

Не все символы выводятся

При просмотре страницы форума, часть символов пропала, а вместо них ромбики:

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

  • Опубликовано 11. апреля 2017
  • Автор: admin
  • Категории ipb
Оставить комментарий
 

Еще нет никаких комментариев.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *