Skip to main content
создание сайта под ключ
×

Обсудить проект

Заполните форму, наш специалист свяжется с вами для консультации (бесплатно), составит для вас персональное предложение. Или звоните: +7(916) 107-51-99 (10.00–18.00, Мск.)

Как к вам обращаться?
Сообщите корректный адрес электронной почты.
Заполните поле, опишите суть задачи.
Необходимо подтвердить согласие с Политикой.

Обновление форума IPB 2.1.5 (cp1251) до IPS 4.x (utf8)

Возникла необходимость апгрейда форума, выполненного на cms IPB v.2.1.5. (с кодировкой базы данных cp1251, php 5.2). Форум «древний», открыт в 2008-м году. В год 2023-й он имел адрес forums.arcanumclub.org. Поскольку мотивация создания этого проекта давно не актуальна, то форум был «заброшен», жил себе тихо и спокойно, доживая свои последние дни, ветшая и умирая. Шли годыipbИ много их прошло.

«В наши дни» — обновился сервер, на котором располагался форум, поддержка php 5.2 на современном серверном ПО прекратилась, но «выбросить» этот «реликт мезазоя» — рука не поднимается (на форуме — десятки тысяч страниц, тысячи пользователей. Жалко! и «жаба душит».). Выход: апгрейд. Будем пробовать?.. Пробовать реализацию задачи: обновдение форума IPB v.2.1.5. до любой актуальной версии IPS v.4.x.

Апгрейд производим на сервере, который еще поддерживает старые версии php (конкретно, php 5.2) и старые же драйвера БД. В нашем конкретном случае имеем дело с доменом 3-го уровня по условному адресу: forums.site.ru

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

Процесс обновления разделен на следующие составляющие/этапы:

  • 2.1.5 > 2.3.6
  • 2.3.6 > 3.0.5
  • 3.0.5 > 3.4.6 > 3.4.9
  • 3.4.9 > 4.1.19
  • 4.1.19 > 4.4.3 > 4.7.12

В процессе обновления кодировка базы данных будет приведена к необходимой, с 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:

admin
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['mysql_codepage']='cp1251';

Вместо неё вставляем:

$INFO['sql_charset']='utf8';

Теперь необходимо сконвертировать кодировку таблиц базы данных и изменить сравнение таблиц. Для этого создаём файл info.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();
?>

Или скачайте 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. (Не точно, что на этом этапе, может на предыдущем? Пишется по памяти и для себяipbзабываются нюансы.)

Проверяем работоспособность обновленного форума и делаем бэкап версии IPS Community Suite v.4.1.19.

В принципе, можно закончить апгрейд и на этом этапе (версия php старенькая, но пока актуальная). Зависит от планов на дальнейшую судьбу Форумаipb

6 этап: обновление до IP.Board 4.4.3

Обновление до версий старше 4.1.19 стандартное однотипное. Скачиваем дистрюбитив (например, IPS Community Suite v.4.2.8), загружаем на сервер с заменой файлов, обновляем:
forums.site.ru/admin/upgrade, следуя инструкциям инсталлятора.

Имеет значение «качество» дистрибутивов, которые удастся «достать» и скачать, стоит использовать проверенные источники (еще лучше: лицензионные версии). Вполне возможно, что процесс обновления может «зайти в тупик» и придется ограничиться «достигнутым результатом». Старые проекты не всегда удается «реанимировать». Установленные давным-давно форумы в неведомой комплектации, напичканные (иногда) сторонним (а то и вредоносным) скриптом — «поднять» реально, но вовсе не со 100%-ым результатом.

Ладно, проверяем (по возможности тщательно и всесторонне) работоспособность обновленного форума и делаем бэкап этой версии.

В зависимости от того, какие версии удалось достать из «надежных источников», производим еще несколько обновлений (хотя некоторые «шаги» можно и пропустить (в теории). Вопрос пригодности/актуальности дистибутивов, увы, придется решать «по месту» и «методом тыка». Посему, не стоит лениться делать бэкапы (максимально часто). Если «не проходит» какой-то вариант скачанной (где-то) версии ips — «откатываемся» и пробуем иной. Увы. Или: лицензия вас ждёт почти за $500. «Весело»? — Нет! «Весело и вкусно!»ipb(сарказм поймёт только проживающий на территории РФ).

6 этап: обновление до IP.Board 4.7.12

Этап «риторический». Методом «проб и ошибок» пытаемся изыскать (и скачать) в Сети для своего конкретного обветшало-замшелого проекта нужные/пригодные варианты обновлений и установить оные. Я перепробовал:

И еще большеipbпока результат не стал удовлетворительный. С множеством «откатов» и переустановок. Шаманство и «танцы с бубном»ipb Но проект, в итоге, кое-как был «запихан» и протестирован благополучно.

По ходу обновлений меняем в установках сервера версии php. Крайняя версия IPS работает на php 8, промежуточные — на php 7.

7 этап: перенос форума на иной URL

В чем «засада»: варианты обновлений тестировались на временном/тестовом домене, отличном от нужного, «родного» url.

Адрес URL сайта и детали, которые Invision Community использует для подключения к базе данных (БД), указаны при первой установке программного обеспечения в файле conf_global.php в корневой директории форума. Но: если изменились — адрес сайта или данные для подключения к базе данных, то необходимо заменить их на нужные. В данном конкретном случае менялись:

  • Адрес сайта (url);
  • Путь на сервере до директории форума и имя директории форума;
  • Имя пользователя БД и имя БД (пароль БД и префиксы таблиц не менялись).

Для смены URL адреса форума на IPS4 необходимо проделать несколько манипуляций:

  • Сменить адрес форума, имя БД, имя пользователя БД, префикс таблиц в conf_global.php (при необходимости, если они иные).
  • Скачать бэкап БД, открыть его в Notepad++, массово изменить адрес старого форума на новый адрес, заменить путь на сервере, имя пользователя БД, имя БД.

Чистим кэш в админпанели форума. Если шаблон отображается адекватно, то начинаем тестировать скрипт ips. С ошибками будет: как повезёт.

Лучше, всё же, делать апгрейд на «нужном» url и на нужном сервере — сразу, но не всегда это возможно (как в данном конкретном случае).

Удачи! Она точно понадобитсяipb

Вопросы (нсли случатся) стоит задать в Комментариях.

PS: был в ЛС вопрос про смайлики-колобки для форума: наш раздел смайликов переехал на иной проект (по ссылке). Выбирайте, качайте. Бесплатно.