facebook twitter hatena line google mixi email

Cms/mediawiki/pukiwikiからmediawikiへ移行

提供: 初心者エンジニアの簡易メモ
移動: 案内検索

sugoiyo72氏が作ったp2m_wiki_converterツールを使ってpukiwikiからmediawikiへ移行

説明がほとんどなかったので中を解析して以下にやり方を記述する

なぜ移行するか

pukiwikiがphp5.3までしか対応されておらず、 php5.4以上にするとうまく表示されません。

pukiwikiの更新も止まってるようなので移行。

移行ツール作者説明ページ

http://weblog.sugoiyo.com/2014/04/02/%E3%80%90%E7%A7%BB%E8%A1%8C%E3%83%BB%E5%A4%89%E6%8F%9B%E7%94%A8%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88%E3%80%91pukiwiki-to-mediawiki/

移行ツールをDL

htmlアクセス(document_root)領域にDL

git clone https://github.com/sugoiyo72/p2m_wiki_converter

mediawikiと別のドメインの場所でもok

mediawikiをDL

移行ツールの公式にはバージョン指定があったが、 一応今現在(2015/5/19)の最新で移行できた。

wget http://releases.wikimedia.org/mediawiki/1.24/mediawiki-1.24.2.tar.gz
tar zxvf mediawiki-1.24.2

pukiwikiのlib/func.phpを指定

  • config.phpを修正
-require "lib/func.php";
+require "/var/www/html/samplewiki1/lib/func.php";

pukiwikiのdataを指定

  • config.phpを修正
-define ("DATA_DIR", "mediawikiconverter/data");
+define ("DATA_DIR", "/var/www/html/samplewiki1");

ログインセッション名修正

DB名と接頭辞の設定によって変化する。

よくわからなければ、一度mediawikiにログインしてブラウザのcookie一覧に それっぽい名前があるので確認してもらえれば良い。

  • actions/uploadToMediaWiki.php
-$setcookieheader = "Set\-Cookie: wikidbUserName=";
+$setcookieheader = "Set\-Cookie: wiki_wiki__session=";

移行実行

http://localhost/p2m_wiki_converter/mediawikiconverter.php

出てくるボタンをポチっていく。

hex2bin()のエラー

hex2bin()のエラーが出た時はpukiwikiのlib/func.phpのhex2bin()関数を削除(php5.4以上だと出る)

PHP Fatal error:  Cannot redeclare hex2bin()

pukiwiki整形をmediawiki整形に置換

  • actions/uploadToMediaWiki.phpの以下場所に置換ロジックを追加

足りないところは追加ください。

function uploadWikiPage ($wiki) {
    $params = $this->getParamsForPageUpload($wiki);
    // ここから追加
    $tmp = $params['postfields']['wpTextbox1'];
    $lines = preg_split("/\r\n|\r|\n/", $tmp);
    $tmps = array();
    foreach ($lines as $line) {
       $line = preg_replace("!\t!", "  ", $line);
       $line = preg_replace("!^\+!", "#", $line);
       $line = preg_replace("!^\*\*\*\*!", "====", $line);
       $line = preg_replace("!^\*\*\*!", "===", $line);
       $line = preg_replace("!^\*\*!", "==", $line);
       $line = preg_replace("!^\*!", "=", $line);
       $line = preg_replace("!^\-!", "*", $line);
       $line = preg_replace("!<([\w]+)!", "<<nowiki />$1", $line);
       $line = str_replace("<!--", "<<nowiki />!--", $line);
       $line = str_replace("{{", "{{<nowiki />", $line);
       $line = preg_replace("!( \[#[\w]{8}\])!", "", $line);
       if (preg_match("!^([\=]+)!", $line, $matches2)) {
              $line .= $matches2[1];
       }
       $tmps[] = $line;
    }
    $tmp = implode("\n", $tmps)."\n";
    $params['postfields']['wpTextbox1'] = $tmp;
    // ここまで追加
    $upload = $this->sendWikiPageData($params, $wiki, "txt");
}

やってることは以下のようなこと

**を==に置換
-を*に
htmlの効果を無効に
+を#に

不要なページを移行後削除する

  • .htaccess
  • Config/plugin/tracker
  • Index.html
  • PukiWiki/1.4
  • PukiWiki/1.4/Manual
  • PukiWiki/1.4/Manual/Plugin/A-D
  • PukiWiki/1.4/Manual/Plugin/E-G
  • PukiWiki/1.4/Manual/Plugin/H-K
  • PukiWiki/1.4/Manual/Plugin/L-N
  • PukiWiki/1.4/Manual/Plugin/O-R
  • PukiWiki/1.4/Manual/Plugin/S-U
  • PukiWiki/1.4/Manual/Plugin/V-Z
  • RenameLog

各種バージョン

pukiwiki 1.4.6
mediawiki 1.24.2
php 5.6.0