К нам обратился клиент с форумом версии 2.3.6 с кодировкой базы данных cp1251 для обновления его до IPS 4.1. Форум имеет нестандартный дизайн в синих тонах, а так же базы данных организаций на DataLife Engine в качестве главной страницы.
Задача определена следующая: обновить форум до актуальной версией IPS 4.1, перенести форум на главную страницу и перенести каталог организаций в отдельную базу данных на отдельную страницу. Для этих целей будет использовано приложение Pages из комплекта IPS4.
Для начала мы подняли копию в директории, таким образом мы предотвратим возможные недоработки или какие-либо другие неприятные обстоятельства в процессе обновления. Разработан максимально подобный стиль, согласованный с владельцем форума.
Процесс обновления будет разделён на следующие составляющие: 2.3.6 > 3.0.5 > 3.2.3 > 3.4.6 > 4.1.10, кроме того, в процессе обновления кодировка базы данных будет приведена к необходимой - utf-8.
1 Этап - обновление на 3.0.5
Первым делом удалим ненужные файлы и директории от 2.3:
sources
skin_acp
retail
resources
modules
lofiversion
jscripts
ips_kernel
interface
install
init.php
index.php
favicon.ico
converge_local
admin.php
admin
Далее загружаем файлы дистрибутива IP.Board 3.0.5.Редактируем конфигурационный файл config_global.php, расположенный в корне форума, а именно:
Удаляем строчку, т.к. она устарела:
$INFO['mysql_codepage'] = 'cp1251';
Вместо неё вставляем:
$INFO['sql_charset'] = 'utf8';
Теперь необходимо сконвертировать кодировку таблиц базы данных и изменить сравнение таблиц. Для этого создаём файл info.php со следующим содержанием:
<?php include("conf_global.php"); $codepage='utf8'; $collation='utf8_unicode_ci'; $dbhost = $INFO['sql_host']; $dbuser = $INFO['sql_user']; $dbpass = $INFO['sql_pass']; $dbname = $INFO['sql_database']; $dbprefix = $INFO['sql_tbl_prefix']; if( !ini_get('safe_mode') ){ @set_time_limit(0); } @header("Content-Type: text/plain; charset=UTF-8"); $dbconn = mysql_connect($dbhost, $dbuser, $dbpass) or die( mysql_error() ); $db = mysql_select_db($dbname) or die( mysql_error() ); $sql = "ALTER DATABASE `".$dbname."` DEFAULT CHARACTER SET $codepage COLLATE $collation"; print "$sql;\n"; $sql ="SELECT table_name FROM information_schema.tables WHERE table_schema = '".$dbname."' AND table_collation NOT LIKE '".$collation."' AND table_name LIKE "."'".$dbprefix."%';"; $result = mysql_query($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 $codepage COLLATE $collation, CONVERT TO CHARACTER SET $codepage COLLATE $collation"; print "$sql;\n"; } mysql_close($dbconn); flush(); ?>
Загружаем скрипт в корень форума и обратимся к нему из браузера: site.ru/info.php
На странице мы увидим запросы, которые необходимо сделать во вкладке SQL в Phpmyadmin. Однако, если форум крупный, имеет большое количество данных, запросы для массивных таблиц имеет смысл делать по одиночку. Например, для таблицы сообщений (posts) мы сделали отдельный запрос, а все остальные вместе. После выполнения запросов имеет смысл проверить данные в таблицах, например в той же таблице posts, данные должны быть в правильной кодировке, читаемые.
Есть множество способов перекодирования данных в таблицах, однако этот способ выбран нами не случайно - он зарекомендовал себя при больших данных в таблицах и работает без каких-либо сбоев и ошибок. Кроме того конвертирование можно сделать с помощью программы Supex Dumper, однако это уже другая история..
Теперь переходим на страницу обновления - site.ru/forum/admin/upgrade и приступаем к обновлению скрипта. Процесс обновления завершился без каких-либо проблем.
2 этап - обновление на 3.2.3
Загружаем файлы в корень форума с заменой существующих и обновляем скрипт. Обновление прошло без проблем. Есть один нюанс - если на вашем форуме больше 100 тысяч сообщений, то необходимо делать ресурсоёмкие запросы вручную.
3 этап - обновление на 3.4.6
Загружаем файлы нового дистрибутива в корень с заменой существующих. Обновляем скрипт. Процесс прошёл без каких-либо проблем.
4 этап - обновление на 4.1.10
Перед обновлением изменили версию php на сервере на 5.6. Загружаем файлы дистрибутива и обновляем скрипт. В ходе обновления проблем не возникло.
5 этап - перенос форума в корневую директорию
Для смены URL адреса форума на IPS4 необходимо проделать несколько простых шагов:
- Сменить адрес форума в config_data.php;
- Снять бэкап базы данных, открыть его в Notepad++ и массово изменить адрес старого форума на новый адрес;
- Воспользоваться инструкций из нашей базы знаний - Смена URL адреса;
Комментариев нет
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.