Обновление форума IPB 2.1.5 (cp1251) до IPS 4.x (utf8)
Возникла необходимость апгрейда форума, выполненного на cms IPB v.2.1.5. (с кодировкой базы данных cp1251, php 5.2). Форум «древний», открыт в 2008-м году. В год 2023-й он имел адрес forums.arcanumclub.org. Поскольку мотивация создания этого проекта давно не актуальна, то форум был «заброшен», жил себе тихо и спокойно, доживая свои последние дни, ветшая и умирая. Шли годыИ много их прошло.
«В наши дни» — обновился сервер, на котором располагался форум, поддержка php 5.2 на современном серверном ПО прекратилась, но «выбросить» этот «реликт мезазоя» — рука не поднимается (на форуме — десятки тысяч страниц, тысячи пользователей. Жалко! и «жаба душит».). Выход: апгрейд. Будем пробовать?.. Пробовать реализацию задачи: обновдение форума IPB v.2.1.5. до любой актуальной версии IPS v.4.x.
Апгрейд производим на сервере, который еще поддерживает старые версии php (конкретно, php 5.2) и старые же драйвера БД. В нашем конкретном случае имеем дело с доменом 3-го уровня по условному адресу: forums.site.ru
Для начала делаем резервную копию проекта, оставляя себе влозможность «отступления».
Процесс обновления разделен на следующие составляющие/этапы:
В процессе обновления кодировка базы данных будет приведена к необходимой, с cp1251 на utf-8.
«Переезд» ipb приходится делать поэтапно, что есть вынужденная мера, технологически «переезд» с древних версий на более-менее новые «в один прием» технически не реализуем (особенность cms). Выбор конкретных версий ipb/ips продиктован наличием в Сети дистрибутивов в свободном доступе. Версии могут быть разные, будем использовать те, что удалось отыскать в собственных архивах и/или скачать в интернет.
1 этап: обновление до IP.Board 2.3.6
Стоит сразу отметить, что оригинальный шаблон форума (если он есть) работать на обновленнных версиях ipb не будет. Имеет смысл перед началом работ в админпанели установить дефолтный шаблон.
По счастью, архив IP.Board 2.3.6 есть в наличии с незапамятных времен, проверенно рабочий.
Файлы из архива «заливаем» на сервер (по ftp или через соответствующий сервис сервера) с заменой существующих на исходном форуме. В адресной строке браузера переходим: forums.site.ru/admin.php
Обновление прошло «безболезненно» и просто. Проверяем работоспособность форума после обновления, выполнив вход в админпанель. Стоит выполнить некоторые базовые манипуляции, дабы в этом убедиться. Проверяем логи ошибок, исправлякм ошибки БД (если они есть). Делаем бэкап этой версии проекта.
2 этап: обновление IP.Board 3.0.5
Сложный и «опасный» этап.
Удалямм ненужные директории и файлы версии ipb 2.3.6:
converge_local
install
interface
ips_kernel
jscripts
lofiversion
modules
resources
retail
skin_acp
sources
admin.php
favicon.ico
index.php
init.php
Загружаем файлы дистрибутива IP.Board 3.0.5 на сервер.
Редактируем конфигурационный файл conf_global.php
, расположенный в корне форума, а именно:
Удаляем строчку, т. к. она устарела:
Вместо неё вставляем:
Теперь необходимо сконвертировать кодировку таблиц базы данных и изменить сравнение таблиц. Для этого создаём файл info.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();
?>
Или скачайте info.php (архив *.zip), разархивируйте и «киньте» в корень сайта.
Загружаем скрипт в корень форума и обратимся к нему из браузера: forums.site.ru/info.php
. На открывшейся странице видим запросы, которые необходимо сделать во вкладке SQL в phpMyAdmin (на сервере).
Если форум крупный, имеет большое количество данных, запросы для «массивных» таблиц имеет смысл делать по отдельности, например: для таблицы сообщений posts
- стоит сделать отдельный запрос, а все остальные запросы — вместе. Обработка запроса займет некоторое время.
После выполнения запросов имеет смысл проверить данные в таблицах, данные должны быть в «правильной» кодировке.
Переходим на страницу обновления: forums.site.ru/admin/upgrade
и приступаем к обновлению скрипта форума.
В окне обновления по указанному выше адресу стоит выбрать режим ручного обновления и каждый нужный запрос sql проводить вручную.
Дело в том, что некоторые переменные php притерпели изменения и их придется править «руками». Каждый новый/очередной дамп запрос sql «появится» в папке сайта по адресу: forums.site.ru/cache
(имеют вид, типо: sql_source_30001.sql
). Скачиваем их (по мере генерации дампов в процессе исполнения этапов обновления) себе на компьютер для правки (при необходимости) и выполнения запросов sql в phpMyAdmin.
Если при sql запросе в phpMyAdmin выдаются ошибки, то придется править дампы «руками» (в любом текстовом редакторе типа Nodpad++) и выполнять повторный запрос. В нашем конкретном случае пришлось менять:
DROP TABLE admin_login;
заменить на DROP TABLE IF EXISTS admin_login;
TYPE=MyISAM
заменить на ENGINE=MyISAM
Впрочем, в каждом конкретном случае могут быть разные варианты ошибок (или их может вовсе не быть).
Процесс обновления прошел с означенными выше ошибками, которые были исправлены «в ручном режиме».
Проверяем работоспособность обновленного форума и делаем бэкап версии IP.Board 3.0.5. Если «что-то пошло не так» и обновить не удалось, то... пробуем снова. Или прекрашаем процесс, если проблема фатальна. Хотя, если всё сделано аккуратно, версия обязана заработать.
Еще: архив данной версии не русифицирован, придется самостоятельно переводить инструкции при апгрейде. Это не критично? Конечно нет.
3 этап: обновление до IP.Board 3.4.6
Если предыдуший этап прошёл успешно и версия работоспособна, идём далее. Загружаем файлы дистрибутива IP.Board 3.4.6 в корень форума с заменой существующих. Обновляем скрипт: forums.site.ru/admin/upgrade
.
Как и с предыдущей версией, обновление производим «в ручном режиме». Скачиваем из директории forums.site.ru/cache
дампы sql и, шаг за шагом, делаем запросы в phpMyAdmin. На этом этапе обновлений много и запросов будет — много, около 30-и. Нудно, но необходимо. Ошибки (если случатся) правим так же (как и на предыдушем этапе), внося правки с дампы и повторяя sql запросы, в очередности обновления.
Для данной версии имеет смысл провести русификацию, базовый пакет русификации. В админпанели форума найдите Manage Languages и установите по очереди все языковые пакеты.
Проверяем работоспособность обновленного форума и делаем бэкап версии IP.Board 3.4.6.
4 этап: обновление до IP.Board 3.4.9
Это (вроде как) крайняя версия линейки 3.x, посему стоит установить перед переходом к новой линейке.
Загружаем файлы дистрибутива IP.Board 3.4.9 в корень форума с заменой существующих. Обновляем скрипт:forums.site.ru/admin/upgrade
всё так же, по одному, по очередности обновления.Проверяем работоспособность обновленного форума и делаем бэкап версии IP.Board 3.4.9.
5 этап: обновление до IPS Community Suite v.4.1.19
Перед этим обновлением изменяем версию php на сервере на 5.6. Загружаем файлы дистрибутива IPS Community Suite v.4.1.19 и обновляем скрипт: forums.site.ru/admin/upgrade
Обновление проистекает в автоматическом режиме. В нашем конкретном случае прошло «без осложнений» и ошибок. Можно установить базовый пакет русификации.
На этом этапе скрипт обновления запросит выбрать, каким образом отображать аватары пользователей, из аватарок пользователей или из их фото. Придется выбирать, возможность задать отдельно аватару и фото — упраздняется. Я задал — Avatar. (Не точно, что на этом этапе, может на предыдущем? Пишется по памяти и для себязабываются нюансы.)
Проверяем работоспособность обновленного форума и делаем бэкап версии IPS Community Suite v.4.1.19.
В принципе, можно закончить апгрейд и на этом этапе (версия php старенькая, но пока актуальная). Зависит от планов на дальнейшую судьбу Форума
6 этап: обновление до IP.Board 4.4.3
Обновление до версий старше 4.1.19 стандартное однотипное. Скачиваем дистрюбитив (например, IPS Community Suite v.4.2.8), загружаем на сервер с заменой файлов, обновляем: forums.site.ru/admin/upgrade
, следуя инструкциям инсталлятора.
Имеет значение «качество» дистрибутивов, которые удастся «достать» и скачать, стоит использовать проверенные источники (еще лучше: лицензионные версии). Вполне возможно, что процесс обновления может «зайти в тупик» и придется ограничиться «достигнутым результатом». Старые проекты не всегда удается «реанимировать». Установленные давным-давно форумы в неведомой комплектации, напичканные (иногда) сторонним (а то и вредоносным) скриптом — «поднять» реально, но вовсе не со 100%-ым результатом.
Ладно, проверяем (по возможности тщательно и всесторонне) работоспособность обновленного форума и делаем бэкап этой версии.
В зависимости от того, какие версии удалось достать из «надежных источников», производим еще несколько обновлений (хотя некоторые «шаги» можно и пропустить (в теории). Вопрос пригодности/актуальности дистибутивов, увы, придется решать «по месту» и «методом тыка». Посему, не стоит лениться делать бэкапы (максимально часто). Если «не проходит» какой-то вариант скачанной (где-то) версии ips — «откатываемся» и пробуем иной. Увы. Или: лицензия вас ждёт почти за $500. «Весело»? — Нет! «Весело и вкусно!»(сарказм поймёт только проживающий на территории РФ).
6 этап: обновление до IP.Board 4.7.12
Этап «риторический». Методом «проб и ошибок» пытаемся изыскать (и скачать) в Сети для своего конкретного обветшало-замшелого проекта нужные/пригодные варианты обновлений и установить оные. Я перепробовал:
- IPS Community Suite v.4.2.8
- IPS Community Suite v.4.4.3 | Пакет русификации
- IPS Community Suite v.4.6.6
- IPS Community Suite v.4.7.12 | Пакет русификации
И еще большепока результат не стал удовлетворительный. С множеством «откатов» и переустановок. Шаманство и «танцы с бубном» Но проект, в итоге, кое-как был «запихан» и протестирован благополучно.
По ходу обновлений меняем в установках сервера версии php. Крайняя версия IPS работает на php 8, промежуточные — на php 7.
7 этап: перенос форума на иной URL
В чем «засада»: варианты обновлений тестировались на временном/тестовом домене, отличном от нужного, «родного» url.
Адрес URL сайта и детали, которые Invision Community использует для подключения к базе данных (БД), указаны при первой установке программного обеспечения в файле conf_global.php
в корневой директории форума. Но: если изменились — адрес сайта или данные для подключения к базе данных, то необходимо заменить их на нужные. В данном конкретном случае менялись:
- Адрес сайта (url);
- Путь на сервере до директории форума и имя директории форума;
- Имя пользователя БД и имя БД (пароль БД и префиксы таблиц не менялись).
Для смены URL адреса форума на IPS4 необходимо проделать несколько манипуляций:
- Сменить адрес форума, имя БД, имя пользователя БД, префикс таблиц в
conf_global.php
(при необходимости, если они иные). - Скачать бэкап БД, открыть его в Notepad++, массово изменить адрес старого форума на новый адрес, заменить путь на сервере, имя пользователя БД, имя БД.
Чистим кэш в админпанели форума. Если шаблон отображается адекватно, то начинаем тестировать скрипт ips. С ошибками будет: как повезёт.
Лучше, всё же, делать апгрейд на «нужном» url и на нужном сервере — сразу, но не всегда это возможно (как в данном конкретном случае).
Удачи! Она точно понадобится
Вопросы (нсли случатся) стоит задать в Комментариях.
PS: был в ЛС вопрос про смайлики-колобки для форума: наш раздел смайликов переехал на иной проект (по ссылке). Выбирайте, качайте. Бесплатно.