Konwersja Przemo na phpBB3

konwersja skryptPrzyszła kryska na Matyska i ja także musiałem zmienić poczciwy wysłużony skrypt Przemo na coś bardziej wydajnego – www.BlueForum.pl nie chodziło szybko i stabilnie na serwerze.. Wybierałem pomiędzy darmowym phpBB3, a komercyjnymi Invision Power Board i vBulletin. Co do tych płatnych skryptów, to na pewno opłata $150 nie stanowiła dla mnie przeszkody, jedną przeszkodą było to, że inwestując tyle kasy już do końca życia będę uwięziony w tym skrypcie, ponieważ żal porzucić go i te zainwestowane pieniądze. Jest to bilet w jedną stronę.

Jeśli chodzi o phpBB3, to także czułem się niepewnie, ponieważ jest to bardzo świeży skrypt i nie ma on jeszcze utrwalonej opinii (przede wszystkim chodzi mi o jego wydajność). Swego czasu strach po plecach mnie przeleciał kiedy zauważyłem, że nie ma żadnych konwerterów phpBB3 -> iPB lub vB. Dlatego wstrzymywałem się z przejściem na którykolwiek skrypt.
Moje obawy zostały rozwiane, kiedy przeglądając niedawno ponownie konwertery zauważyłem, że pojawił się oficjalny konwerter phpBB3 -> iPB. To błyskawicznie wpłynęło na podjęcie decyzji – przejście na phpBB3, ale pozostawiając sobie jeszcze możliwość ucieczki w komercyjną stronę oprogramowania.

Najbardziej (jak zawsze przy takich rzeczach) bałem się problemu z polskimi znakami, które stanowią zawsze zmorę jeśli chce się przenosić jedną bazę danych do drugiej. Na szczęście obeszło się bez takich problemów.

Nie odinstalowywałem modyfikacji Przemo – bazowałem na oryginalnej bazie Przemo podczas konwersji, skoro tak, czy siak Przemo bazuje na phpBB2, a do tej wersji był przystosowany konwerter.
Całość zajęła mi może z 1,5h (nie licząc 1h przerwy, którą musiał „odbyć”, ponieważ przekroczyłem limit 120’000 zapytań do bazy w ciągu godziny :P ).
Dwie rzeczy musiałem zrobić po pomyślnym przejściu:

  1. Aktualizacja tematów
    Standardem w phpBB3 jest to, że przy każdym napisanym poście na forum, do bazy zapisuje się temat którego ten post dotyczył. Jest to wg. mnie znaczna redundancja danych, ale cóż :| należy jednak skorzystać z porady zamieszczonej poniżej, ponieważ przy używaniu Szukajki nie pojawią się odnośniki do tematów/postów kiedy w bazie nie ma uzupełnionego tego pola.
    A nie wiadomo czemu oryginalny konwerter nie uwzględnił tego… mam nadzieję, że w wersji 3.0.1 zostanie to naprawione.

    UPDATE phpbb_posts SET post_subject=CONCAT(„Re: „, (SELECT topic_title FROM phpbb_topics WHERE phpbb_topics.topic_id=phpbb_posts.topic_id)) WHERE post_subject=” LIMIT 20000;

    Jeśli mamy forum, które ma więcej, niż 20k postów należy wykonać kilka razy to zapytanie, aż nie będzie modyfikować żadnych wartości w bazie danych. Proszę także nie martwić się długim czasem wykonywania (~60 sec – w zależności od szybkości serwera).

  2. Ikonki systemu i przeglądarki
    Modyfikacja ta jest domyślnie wgrana do Przemo, ale niestety w phpBB3 nie i trzeba skorzystać z MODyfikacji, która jest dostępna w internecie: http://phpbb3.pl/viewtopic.php?f=15&t=862. Aby przenieść teraz informacje o przeglądarce i systemie ze starych postów Przemo na nowe phpBB3 należy wykonać poniższe czynności:

    • Zrobić backup tabeli phpbb_posts – ponieważ na niej będziemy operować
    • Wykonać zapytanie SQL:

      ALTER TABLE `phpbb_posts` DROP `topic_id`,
      DROP `forum_id`,
      DROP `poster_id`,
      DROP `post_time`,
      DROP `poster_ip`,
      DROP `post_username`,
      DROP `enable_bbcode`,
      DROP `enable_html`,
      DROP `enable_smilies`,
      DROP `enable_sig`,
      DROP `post_edit_time`,
      DROP `post_edit_count`,
      DROP `post_attachment`,
      DROP `post_icon`,
      DROP `post_expire`,
      DROP `reporter_id`,
      DROP `post_marked`,
      DROP `post_approve`,
      DROP `poster_delete`,
      DROP `post_edit_by`,
      DROP `post_parent`,
      DROP `post_order`;

      Które usunie wszystkie niepotrzebne kolumny (wraz z zawartością).

    • Uruchomić skrypt:

      /* *
      * User_agent updater 1.01 by BlueMan ( http://www.BlueForum.pl/ && http://www.BlueMan.pl/ && others )
      *
      * W phpBB3 w modyfikacji wymagane jest, aby kolumna user_agent zawierala tylko i wylacznie dane jakie przesyla przegladarka.
      * Przemo nie wiadomo czemu „zasmiecil” to jakimis innymi danymi, ktore teraz trzeba usuwac.
      *
      * Smieci:
      * a:3:{i:0;s:24:”icon_windows_xp_2003.gif”;i:1;s:14:”icon_myie2.gif”;i:2;s:57:”
      * ;}
      *
      * */

      include 'config.php’;
      $con=mysql_connect($dbhost,$dbuser,$dbpasswd);
      mysql_select_db($dbname);

      $i=0;
      $ile=mysql_query(’SELECT post_id,user_agent AS a FROM ’.$table_prefix.’posts ORDER BY post_id;’);
      while ($r=mysql_fetch_array($ile)) {
      if ( eregi(„a:[0-9]+:{i:[0-9]+;s:[0-9]+:”[a-z0-9_-]{1,}.gif”;i:[0-9]+;s:[0-9]+:”[a-z0-9_-]{1,}.gif”;i:[0-9]+;s:[0-9]+:””, $r[a]) ) {
      $nowe = eregi_replace(„a:[0-9]+:{i:[0-9]+;s:[0-9]+:”[a-z0-9_-]{1,}.gif”;i:[0-9]+;s:[0-9]+:”[a-z0-9_-]{1,}.gif”;i:[0-9]+;s:[0-9]+:””, „”, $r[a]);
      $nowe = str_replace('”;}’,”,$nowe);
      mysql_query(’UPDATE ’.$table_prefix.’posts SET user_agent=”’.$nowe.'” WHERE post_id=’.$r[’post_id’].’ LIMIT 1;’);
      $i++
      }
      }

      echo 'Wszystkie ’.$i.’ posty zostały zmodyfikowane;

      ?>

      Plik z w/w kodem zapisać w głównym katalogu instalacji Przemo – równolegle do pliku config.php, którego includujemy, aby pobrać dane potrzebne do połączenia z bazą danych. Nie zorientowałem się o tym, ale to są dane poddane serializacji. Nie skojarzyłem tego, dlatego wykorzystałem wyrażenie regularne do usunięcia tych „śmieci”.

    • Uruchomić ten plik przez nasza ulubioną przeglądarkę internetową
    • Jeśli wszystko przebiegło pomyślnie, to baza danych zostanie oczyszczona z niepotrzebnych śmieci.
    • Robimy export tej tabeli – zaznaczając, aby dane zostały objęte transakcją, aby były zgodne z MYSQL40, a przede wszystkim wybieramy rodzaj exportu: UPDATE! Zapisujemy jako plik *.gz
    • Importujemy wyeksportowany kawałek tabeli do nowej bazy (już po konwersji z Przemo do phpBB3) i tyle :) cieszymy się archiwalną wiedzą nt. systemów/przeglądarek użytkowników

Jak widać, nie do końca jest to trywialne. I kilka dni trzeba poświęcić, aby zagłębić się w phpBB3, ale myślę, że warto – obciążenie serwera spadło o 3% (po kilku dniach obserwacji!), i mam nadzieję, że spadnie jeszcze więcej !button kei

W tym miejscu chciałem także podziękować mojej firmie hostingowej na której utrzymuje BlueForum. Dzięki wspaniałemu, kompetentnemu BOK konwersja nie trwała dłużej, niż pół nocy! Do mojej dyspozycji został oddany port 22, zwany popularnie shell/ssh :) który znacznie ułatwił przenoszenie plików, a także wykonywanie zapytań sql. Po zgłoszeniu, że wyczerpałem limit 120’000 zapytań do bazy support szybko wyłączył nałożone ograniczenia.
Lepszej firmy hostingowej jeszcze nie spotkałem i mam nadzieję, że nie spotkam, ponieważ będę stałym klientem kei.pl !