Jump to content
  • Обновление форума 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 адреса;

     





      Report запись


    User Feedback


    There are no comments to display.



    Join the conversation

    You can post now and register later. If you have an account, sign in now to post with your account.
    Note: Your post will require moderator approval before it will be visible.

    Guest
    Add a comment...

    ×   Pasted as rich text.   Paste as plain text instead

      Only 75 emoji are allowed.

    ×   Your link has been automatically embedded.   Display as a link instead

    ×   Your previous content has been restored.   Clear editor

    ×   You cannot paste images directly. Upload or insert images from URL.

    Loading...

Messenger

    ×
    ×
    • Create New...

    Important Information

    By using our site you agree to our Privacy Policy