Перейти к содержанию
  • Обновление форума IPB 2.3.6 (cp1251) до IPS 4.1




    К нам обратился клиент с форумом версии 2.3.6 с кодировкой базы данных cp1251 для обновления его до IPS 4.1. Форум имеет нестандартный дизайн в синих тонах, а так же базы данных организаций на DataLife Engine в качестве главной страницы.

    Задача определена следующая: обновить форум до актуальной версией IPS 4.1, перенести форум на главную страницу и перенести каталог организаций в отдельную базу данных на отдельную страницу. Для этих целей будет использовано приложение Pages из комплекта IPS4.

    Спойлер

    nnforum1.jpg

    nnforum2.jpg

    Для начала мы подняли копию в директории, таким образом мы предотвратим возможные недоработки или какие-либо другие неприятные обстоятельства в процессе обновления. Разработан максимально подобный стиль, согласованный с владельцем форума. 

    Процесс обновления будет разделён на следующие составляющие: 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 необходимо проделать несколько простых шагов:

    1. Сменить адрес форума в config_data.php;
    2. Снять бэкап базы данных, открыть его в Notepad++ и массово изменить адрес старого форума на новый адрес;
    3. Воспользоваться инструкций из нашей базы знаний - Смена URL адреса;

     





    Обратная связь


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



    Присоединяйтесь к обсуждению

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

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

    ×   Вставлено с форматированием.   Вставить как обычный текст

      Разрешено использовать не более 75 эмодзи.

    ×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

    ×   Ваш предыдущий контент был восстановлен.   Очистить редактор

    ×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

    Загрузка...

×
×
  • Создать...

Важная информация

Используя наш сайт вы соглашаетесь с нашей Политикой конфиденциальности