facebook twitter hatena line email

Cms/mediawiki/pukiwikiからmediawikiへ移行

提供: 初心者エンジニアの簡易メモ
2015年5月21日 (木) 02:54時点における36.55.238.17 (トーク)による版

移動: 案内検索

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

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

なぜ移行するか

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

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

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

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()

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の効果を無効に
+を#に

各種バージョン

pukiwiki 1.4.6
mediawiki 1.24.2
php 5.6.0