MyBBをインストールしてphpBBからデータをインポートしてみた。
フォーラムのパーミッションが移行できないのはちょっと痛い。移行した場合には、公開前に十分に確認しておく必要あり。それでもbbPressへの移行とくらべたらきっちりデータが移せるので、添付ファイルを使用していたり、ログの量の多い掲示板から移行するならMyBBの方が良いと思う。
前提条件
- WordPress 3.9.1日本語版
- MyBB 1.6.13
- phpBB 3よりデータ移行
インストール手順
- 公式サイトのダウンロードページより、最新版のパッケージをダウンロードし、公開用のディレクトリに解凍。
# fetch -o /tmp/mybb.zip http://www.mybb.com/download/latest # cd /usr/local/www/mybb # sudo -u www unzip /tmp/mybb.zip # sudo rm -rf Documentation # sudo mv Upload/* . # sudo rmdir Upload
- ファイルのパーミションを変更。
# sudo chmod 666 inc/config.default.php inc/settings.php inc/languages/english/*.php inc/languages/english/admin/*.php # sudo chmod 777 cache cache/themes uploads uploads/avatars admin/backups
- MyBB用のデータベースを作成。
# mysql -u root -p Enter password: mysql> create database mybbdb; mysql> grant all privileges on mybbdb.* to bbadmin identified by 'bbpassword'; mysql> quit; #
- Webでアクセスし、インストール画面が表示されたら「Next」をクリック。
「Send anonymous statistics about your server specifications to the MyBB Group」はチェックしたままで良い。(利用環境の調査のため、PHPやデータベースのバージョンなど環境に関する情報を開発グループに匿名で送信する。協力したくなければチェックをはずしても良い。)
- ライセンスが表示されたら内容を確認の上、「Next」をクリック。ライセンスはLGPL。
- 環境確認の画面が表示されたら内容を確認の上、「Next」をクリック。
- データベース情報の画面が表示されたら、データベース情報を入力する。
データベース情報は、次の内容を入力する。
- Database Engine: MySQL
- Database Server Hostname: localhost
- Database Username: bbadmin ※データベースユーザの名前
- Database Password: bbpassword ※データベースのパスワード
- Database Name: mybbdb ※作成しておいたデータベース名
- Table Prefix: myforum_ ※デフォルトから変更しておく
- Table Encoding: UTF-8 Unicode
- インストーラがテーブルを作成して結果を表示するので、「Next」をクリック。
- インストーラがテーブルを初期化して結果を表示するので、「Next」をクリック。
- インストーラがデフォルトのテーマとテンプレートをインストールして結果を表示するので、「Next」をクリック。
- 掲示板情報を入力する画面が表示されたら、必要に応じて内容を変更して「Next」をクリック。
- 掲示板の管理者用のログイン情報を入力する画面が表示されたら、必要項目を入力して「Next」をクリック。
ここで入力した情報で管理者用のログインが作成される。ユーザ名には日本語も利用可。
- 完了画面が出たら、インストール完了。
phpBBからのインポート
- 移行ツールダウンロードページから最新版のツールをダウンロードし、MyBBをインストールしたディレクトリ内に展開する。
# fetch -o /tmp/merge.zip http://www.mybb.com/download/merge-system/latest # cd /tmp # sudo -u www unzip merge.zip # mv merge_1.6.10/merge /usr/local/www/mybb # rm -rf merge.zip merge_1.6.10
- 移行ツールを実行する前に、パスワードを変換してくれるloginconvert.phpプラグインをインストールしておく。
# cd /usr/local/www/mybb/merge # sudo -u www cp logincovert.php ../inc/plugins
- MyBBサイトの下のmergeディレクトリにブラウザからアクセスし、「Next」をクリックする。
- 環境確認の画面が表示されたら「Next」をクリック。
- 移行元のシステム選択画面が表示されたら「phpBB 3」を選択して「Next」をクリック。
移行システムインストール時にloginconvert.phpをプラグインディレクトリにコピーし忘れていると、次のようにエラーが表示される。このエラーが表示されたら、「Next」をクリックする前にloginconvert.phpをコピーしておく。 - 変換画面が表示されたら「Database Configuration」の「Run」をクリック。
- phpBBのデータベース情報を設定する画面が表示される。
次のように指定して「Next」をクリック。変数名で記載したものは、phpBBをインストールしたディレクトリ下のconfig.phpの中の変数として指定された値を記述する。
- Database Engine: MySQL
- Database Server Hostname: localhost
- Database Username: $dbuser
- Database Password: $dbpassword
- Database name: $dbname
- Table Prefix: $table_prefix
- Table Encoding: UTF8 Unicode
- Automatically convert messages to UTF8?: no
- テーブルには依存関係があるため、全部まとめて一度に変換することができない。「Run」ボタンが有効になったものから順に実行していく。実行すると次のオプション画面が表示される場合があるが、特に必要がなければデフォルト値のまま「Next」をクリックして実行する。
- すべて実行すると終了画面が表示される。
レポートが必要なければそのままブラウザを終了する。通常はレポート不要。
- インポートしただけの状態だと、記事数やフォーラム数の統計がデータベースに反映されていない。AdminCPにログインし、「Tool & Maintenance > Recount & Rebuild」のページですべてのデータを更新しておく。
以上でインポート完了。機能的に類似性が高いおかげで、かなりきれいにインポートされる。インポートできなかったものは、気づいた範囲では次のもの。
- リンクフォーラムのリンク
- フォーラムのパーミッション
- 一部BBcode(数字指定のリストや、その入れ子のリスト)
- 添付ファイル
uploadsディレクトリに添付ファイルは存在するものの、中身を開くと403 ForbiddenのHTMLファイルとなっている。直リンクさせないためにphpBBの添付ファイル保存ディレクトリのパーミッションが700にしてあ るのが原因。移行ツール実行前にphpBBのuploadsディレクトリのパーミションを755に変更しておけば、おそらく正常にインポート可能。
添付ファイルのインポート
インポート作業を終わった後に添付ファイルのみインポートし直したい場合には、MyBBのトップディレクトリに次の内容で migrate-attachment.php ファイルを作成する。ファイル中の8~18行目は自分の環境に合わせて書き換える。
ただし、このスクリプトはphpBBとMyBBが同じサーバ上にインストールされている場合にしか使えない。異なるサーバ上にインストールされている場合には、スクリプトを自力で改造するか、phpBBのuploadsディレクトリのパーミションを755に変更してから移行ツールを再度実行するしかない。
cf. Merge System Attachment Not Copied (My BB Community Forums)
<?php /* mybb connect */ define("IN_MYBB", 1); define("NO_ONLINE", 1); require("global.php"); // MySQL credentials $username = "mysql_username"; $password = "mysql_password"; $hostname = "localhost"; // phpBB3 database $phpbb_database = "phpbbdb"; $phpbb_prefix = "myforum_"; // MyBB database $mybb_database = "mybbdb"; $mybb_prefix = "newforum_"; // Attachments placed directories $from_folder = "/home/your_folder/phpbb3/files/"; //phpBB3 $to_folder = "/home/your_folder/mybb/uploads/"; //MyBB $dbh = mysql_connect($hostname, $username, $password) or die("Unable to connect to MySQL"); mysql_set_charset('utf8',$dbh); $selected = mysql_select_db($mybb_database,$dbh) or die("Could not select database"); $not_found = 0; $query=$db->query("SELECT * FROM ".$mybb_prefix."attachments"); while($result=$db->fetch_array($query)) { $file_phpbb3 = getFileData( $result['filename'] ); $selected = mysql_select_db($mybb_database,$dbh) or die("Could not select database"); if ( !empty($file_phpbb3) ) { echo "MYBB: id: " . $result['aid'] . " name: " .$result['filename'] . "<br/>"; echo "PHPBB: id: ".$file_phpbb3['attach_id']." physical_filename: ".$file_phpbb3['physical_filename']." <br/>"; //uncomment this line once you are sure you want to copy files //copyFile( $file_phpbb3['physical_filename'], $result['attachname'] ); } else { echo "File id: ".$result['aid']." (".$result['filename'].") was not found in phpbb3<br/>"; $not_found++; } echo "<br/>"; } echo $not_found." files not found in total"; function getFileData( $name ) { global $dbh; global $phpbb_prefix; global $phpbb_database; $selected = mysql_select_db($phpbb_database,$dbh) or die("Could not select database"); $sql = "SELECT attach_id, physical_filename FROM ".$phpbb_prefix."attachments WHERE real_filename LIKE '".mysql_real_escape_string($name)."'"; $result = mysql_query($sql); if (!$result) { return; } else { $row = mysql_fetch_array($result); return $row; } } function copyFile( $from, $to ) { global $from_folder, $to_folder; if (!copy($from_folder.$from, $to_folder.$to)) { echo "Error copying<br/>"; } else { echo "File copied<br/>"; } } ?>
実際に実行して、設定した値に問題がないことを確認した上で、42行目のコメントをはずして実行する。ブラウザからMyBBのトップの下のmigrate-attachments.phpをアクセスすれば実行される。
実行後はmigrate-attachments.phpを忘れずに削除しておく。
BBcodeの修復
MyBBにインポートされたデータを見ると、表示できないBBcodeはリストを閉じるコードが [/list] から勝手に [/list:u] に書き換わっていることに気づいた。これを [/list] に戻してやれば正常に表示できる。
というわけで、mysqlのコマンドラインから一括変換して簡単に修復。
# mysql -u root -p Enter password: mysql> use mybbdb; mysql> update newforum_posts set message=replace(message, "[/list:u]", "[/list]"); mysql> quit; #
テーマのインストール
ちょっとめんどくさい。
- 公式サイトのテーマダウンロードページから、好みのテーマを選んでダウンロード。
- ZIPファイルを解凍。
- テーマ名\Upload\imagesの下にあるフォルダをMyBBのimagesの下にディレクトリ構成をたもったままコピー。
- MyBB のAdmin CPのTemplate&Styles > Import Themeで、Import fromに解凍したテーマの中にある.xmlファイルを指定し、「Ignore Version Compatibility」にチェックして「Import Theme」をクリック。
PCからアップロードする前提の処理になっているのが面倒。サーバ上での操作だけで簡単にインストールできたら良いのに。