Лицензия на IPB

  • Где купить IP.Board
  • Есть банковская карта? Купи IPB и другие продукты у разработчиков!
  • Наш выбор – покупать лицензии на форум и компоненты без посредников.
  • Русификация пользовательской части форума всегда доступна в архиве IPS.

Работа для фрилансеров

  1. Создание калькулятора для IPB
  2. Доработать хук чата для IPB 3.3.4
  3. Компонент
  4. Запрос на плагин - подмена ссылок
  5. Перенос двух форумов на один хостинг

Случайный файл

  • IBR Beige Style 2.3–2.2 (Russian)


Обновление форума IP.Board до версии 3 -----

Май 24 2011 10:48 | Ritsuka » в Обслуживание IP.Board

В IP.Board 3 было сделано много существенных изменений в архитектуре приложения. Одним из самых больших нововведений стала работа форума с UTF-8.

При обновлении вашего старого форума до версии 3, вам скорее всего прийдется столкнуться с необходимостью сконвертировать вашу старую базу в новую (в формате UTF-8).

Данная инструкция поможет сделать шаг за шагом.
Шаг 0. Готов ли ты к переходу?

Прежде чем грезить о переходе на новый форум, необходимо узнать, сможет ли сервер работать с ним.

Для оценки существующей конфигурации PHP, создаем в корневой директории старого форума файл myinfo.php с содержимым
<?php

phpinfo();

Запускаем скрипт в браузере. Результатом будет табличка следующего вида:
-IMG-

Во-первых, версия PHP - она должна быть 5.1.x, а лучше 5.2.x, если версия PHP 4.x.x или PHP 5.3.x, форум у вас работать не будет.

Во-вторых, новому IP.Board 3 нужны модули расширения PHP:



  • dom
  • gd
  • iconv
  • libxml
  • mbstring
  • mysqli или mysql
  • Reflection
  • SimpleXML
  • SPL


Ищите эти модули поиском по странице. Если одного из выше перечисленных модулей не будет - форум не будет работать.

В-третьих, крайне желательно наличие следующих модулей:



  • json
  • sockets
  • sphinx
  • XCache или APC


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

В-четвертых, память выделенная для PHP.

Найдите значение memory_limit в таблице на странице. Оно должно быть не менее 32M, идеально 128M, значение надо смотреть в первой колонке (Local Value). Если памяти будет меньше, то форум не сможет нормально обновиться, возникнут проблемы с импортированием стилей, настроек и языков.

Итак, если все условия выполнены - мы готовы к обновлению. Приступим...

Шаг 1. Подготовка.

Прежде чем начинать что-то делать, необходимо подготовить пути отступления на случай непредвиденных ситуаций. Здесь нам крайне помогут следующие инструменты:

Для обладателей SSH

Делаем резервную копию базы данных:

Получаем всю информацию о соединении с БД
> cat ./mydomain.ru/htdocs/forums/conf_global.php | grep sql

$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['mysql_tbl_type'] = 'MyISAM';
$INFO['mysql_codepage'] = 'cp1251';


Путь до conf_global.php у вас конечно будет свой. Здесь все данные для наглядности, у вас они будут другими!

Теперь когда данные нам известны делаем резервную копию базы
> mysqldump  -h server.mysql -u db_user -p db_forum --default-character-set=cp1251 > dump.sql

И сделаем сразу архивчик
> tar -czf dump.tar.gz dump.sql

Для обладателей SypexDumper

Подробная инструкция по использованию

Шаг 2. Новые файлы.

Теперь необходимо закачать новые файлы форма на сервер. Для этого в начале разберемся со старыми. Часть из них нам больше уже не понадобиться никогда. Потому удаляем следующие директории и файлы:
./sources
./skin_acp
./retail
./resources
./modules
./lofiversion
./jscripts
./ips_kernel
./interface
./install
./init.php
./index.php
./favicon.ico
./converge_local
./admin.php
./admin

Должны остаться следующие файлы и директории:
./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).

Шаг 3. Подготовка к обновлению.

Кодировка в 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';

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

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

Это очень важный этап. Если его выполнить неверно, дальнейшее обновление форума не будет иметь смысла.

Основная идея перекодирования базы
У нас есть резервная копия базы в файле. Это простой текст в кодировке windows-1251 (cp1251). Для того чтобы перевести этот текст в UTF-8, необходимо воспользоваться конвертером (редактор текста с поддержкой перекодирования, утилита для перекодирования; все что угодно, что может перевести текст из Windows-1251 в 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

http://forums.ibreso...showtopic=58417 от Ritsuka

Дополнение к способу Ritsuka для больших баз

Если скрипт подвисает на конвертировании базы, в основном на таблице posts, то необходимо воспользоваться модифицированным скриптом и SSH.

Загружаете следующий скрипт в корневую директорию форума:

<?php
// Database info

include("conf_global.php");

$dbhost = $INFO['sql_host'];
$dbuser = $INFO['sql_user'];
$dbpass = $INFO['sql_pass'];
$dbname = $INFO['sql_database'];

//---------------

$dbconn = mysql_connect($dbhost, $dbuser, $dbpass) or die( mysql_error() );
$db = mysql_select_db($dbname) or die( mysql_error() );

$sql = "ALTER DATABASE `".$dbname."` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;\n";

$exec_sql = 'SHOW TABLES';
$result = mysql_query($exec_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;\n";
}
mysql_close($dbconn);

echo $sql;

Запускаете скрипт через браузер. Вы получите список инструкций для выполнения в mysql. Копируете код страницы в файл, например win2utf.sql, и закачиваете данный файл на сервер. Запомните путь к файлу, для примера у нас будет путь /home/user/htdocs/

Заходите на сервер с использованием SSH и выполняете следующую команду:

mysql -uusername -p dbname < /home/user/htdocs/win2utf.sql


Имя пользователя username, имя базы dbname и путь до файла sql запросов у вас должны быть свои.

Вводите пароль и ожидаете завершения работы команды mysql.
Использование специального Perl скрипта

Метод исключительно для SSH.

Скачиваете скрипт

wget http://www.pablowe.net/convert_charset


Выставляете ему права на запуск

chmod a+x convert_charset


Запускаете конвертацию базы форума в тестовом режиме

./convert_charset --database=database --host=localhost --user=username --askpass --test


В консоль будут выведены команды, которые будет выполнять скрипт. Убедитесь, что все таблицы базы будут сконвертированы. Если скрипт не сможет найти таблицы, выполните следующую команду:

mysql -u username -pDBUSERPASSWORD -e 'SHOW TABLES' database | awk '{if (NR>1) {if (NR==2) {a=$1} else {a=a "," $1}} } END {print a}'

Данные для username, DBUSERPASSWORD и database должны быть вашими.

Вы получите список таблиц в базе, дальше этот список необходимо добавить к ключу –tables

./convert_charset --database=database --host=localhost --user=username --askpass --tables=admin_login_logs,admin_logs,admin_permission_rows,announcements,.... --test


Убедившись, что все таблицы будут затронуты, запустите команду без ключа –test

Восстановление новой базы данных

Наша база сконвертирована и готова к обновлению. Однако ее еще надо восстановить на сервере 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, база готова для обновления.

Шаг 4. Обновление

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

Шаг 5. Ошибки после обновления

Кодировка страниц

Бывает так, что после обновления, зайдя на страницу форума, вы видите что-то подобное:
-IMG-

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

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

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


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

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

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


0 – комментариев

Страница 1 из 1

Комментариев еще нет

Вы не можете оставить комментарий
Страница 1 из 1


Сайт работает на IP.Content

Контактная информация

Вопросы по работе сайта

+7 (917) 501-4765
C 10 до 20 в рабочие дни (время московское)

Техническая поддержка

Контактные данные специалистов

Дизайн форумов

IPB 3.x ¦ IPB 2.x

Бесплатные шаблоны

IPB 3.2 – 3.4 ¦ IPB 3.1 ¦ IPB 3.0 ¦ IPB 2.2 – 2.3 ¦ IPB 2.1 ¦ Клипарт
Лицензия на использование ¦ Ваша поддержка ¦ О проекте
Copyright © 2005-2016 IPBSkins.ru Team
При копировании материалов с сайта
прямая ссылка на источник обязательна