pukiwikiのアップデート作業

Last-modified: 2008-06-29 (日) 01:10:04 (3281d)
※※このサイトは2012年頃より更新を停止しています。※※

pukiwikiのアップデート作業(実施日:2006-11-21)

対象

  • 元環境:1.4.6
  • アップデート:1.4.7_notb

条件

  • 使用サーバ環境が「LANG=ja_JP.euc」なのでUTF-8版ではなくEUC-JP版を使う。
    いつかUTF-8環境に移行するときはこのへんを参照すべし。
  • スキンはiridを使う。

実施した作業

  1. パッケージダウンロード
  2. 別ディレクトリでパッケージを展開
  3. pukiwiki.ini.php
    元とのdiffを参照しながら適宜修正
  4. 携帯向け修正
    • pukiwiki.ini.php
      以前使ってたauのWAP2.0対応端末からのアクセスをi-modeと同等に扱うように下記の記述を加える。
      • $agents = array の内部に
        array('pattern'=>'#^(Vodafone)/([0-9\.]+)#',	'profile'=>'keitai'),
        array('pattern'=>'#^(SoftBank)/([0-9\.]+)#',	'profile'=>'keitai'),
        array('pattern'=>'#^KDDI#',	'profile'=>'keitai'),
    • keitai.skin.php
      • navi部分が
        0.Top | 1.Menu | 2.新規 | 3.編集 | 9.更新履歴
        になる感じに修正。
      • 携帯画面の最下部にnaviを追加する。
      • iridスキンを使うなら、上記のように編集したkeitai.skin.phpをirid配下に設置すること。
  5. ソース表示用追記
    上部のリンクに「ソース」を追加し、sourceコマンドで表示中のページのHTML整形前のテキスト生データを出力するようにした。
    以下、変更箇所
    • lib/html.php
      61行目付近 - 追加:$_LINK['source']   = "$script?cmd=source&page=$r_page";
      86行目付近 - 追加:$link_source    = & $_LINK['source'];
    • skin/pukiwiki.skin.php
      114行目付近 - 追加: <?php _navigator('source') ?> |
    • ja.lng.php
      131行目付近 - 追加:$_LANG['skin']['source']    = 'ソース'; // HTML整形前テキスト表示
    • skin/pukiwiki.skin.php
      スキンに適宜追記
  6. ついでに必要であれば下記のmetaタグもpukiwiki.skin.phpに付け加える。
     <meta http-equiv="Pragma" content="no-cache" />
     <meta http-equiv="Cache-Control" content="no-cache" />
     <?php if ( $nofollow )  { ?> <meta name="robots" content="NOINDEX,NOFOLLOW" /><?php } ?>
  7. プラグイン
    calendar_viewer にちょいと。
    「<<前の5件」とか「次の5件>>」っていうリンクは、標準のプラグインだとリストの一番最後にだけ出る。
    これをリストの一番上に出したいなと思ったのでちょっとソースに手を加える。
    下記、変更箇所。
    • 対象ファイル:calendar_viewer.inc.php,v 1.34 2005/06/05
      • いじるところはfunction plugin_calendar_viewer_convert()。
      • 見るところは「// Include start」以降。
      • A)
        150行目過ぎぐらい、コメントで「// $limit_page の件数までインクルード」とあるところの while{〜〜〜} の塊りが、表示している記事を読み込んでいるところになる。
      • B)
        260行目過ぎぐらい、コメントで「// ナビゲート用のリンクを末尾に追加」とあるところの if{〜〜〜} の塊りが、「<<前の5件」「次の5件>>」というリンクを出力しているところになる。
      • 元々のソースでは上から順序良く$return_bodyにつなげていってるだけ。
      • なので、A)で
        $return_body .= $head . $body;
        となっているところを↓↓
        $tmp_return_body .= $head . $body;
        とでもしておく。
      • そして、B)の
        $return_body .=
        となっているところを↓↓
        $link_prev_and_next .=
        とでもしておく。
      • このfunction plugin_calendar_viewer_convert()の最後で
        return $return_body;
        の直前に
        $return_body .= $link_prev_and_next . $tmp_return_body . $link_prev_and_next;
        と書き加える。
    • kifubbs
      plugin本体とcssとデータディレクトリを移動。
  8. index.php
    自分スクリプトをインクルード
  9. iridスキン適用
    pukiwiki.skin.phpとkeitai.skin.phpだけ新しいのと差し替えて、ディレクトリ丸ごと入れ替え。
  • 必要であればpukiwiki.skin.phpに下記のmetaタグの付け加え
     <meta http-equiv="Pragma" content="no-cache" />
     <meta http-equiv="Cache-Control" content="no-cache" />
     <?php if ( $nofollow )  { ?> <meta name="robots" content="NOINDEX,NOFOLLOW" /><?php } ?>
  1. mb_send_mail関数のバグ対応
    • lib/mail.php
      必要であればやる。
  2. ディレクトリ移動
    元環境のログディレクトリやデータディレクトリを新環境に移して、新環境と元環境を入れ替え。

追加作業1:スパム書き込み対策(2007-05-04)

このごろ海外からのスパム書き込みがやたら増えてきたので、下記を参考にスパムフィルタのライブラリを導入してみた。
参考:ARK-Web SandBox Wiki - PukiWiki/Akismetによるspam(スパム)防止機能

  1. WordPress.com から API-key を入手する
    http://wordpress.com/api-keys/
    ここでユーザ登録をする。英語だけど頑張って読む。
  2. akismetのクラスライブラリを入手する
    入手元ページ
    akismet.class.zip をダウンロードするだけ。作成/配布に携わる方々に感謝。
    ちなみに上記はPHP4用。PHP5だったらまた別のを用意するべきだはず。
  3. ARK-Web SandBox Wikiさんのページからpukiwiki用ライブラリを入手する
    俺が入手したのは、新しい方の「akismet_filter.php.1.2」。
    ダウンロードリンクのあるページ
    作者の Akio KONUMA さんに感謝。
  4. 取得ファイル中の必要箇所書き換え
    • 入手したAPI-keyの部分を、上記のダウンロードページを参考にして書き加え。
    • pukiwikiの lib/plugin.php に必要記述を書き加え。
  5. 入手/変更済みの各種ファイルをアップロード
    lib/plugin.php
    lib/akismet.class.php
    lib/akismet_filter.php

追加作業2:スパム書き込み対策(2007-05-06)

上記の対応をしたら、今度はスパマーがMenuBarを直接書き換えやがった。
しかもタイムスタンプの変更しないで。いやらしいねぇ。
そこで、ページ編集の権限制限を施すことに。
しかーし。うちのサーバはPHPがCGIで動作してるとか何とかで、素直にPHPのBASIC認証を使うことが出来ない。
そこで、TOBY SOFT wiki:Wiki/PukiWiki/Tips/編集者制限を掛けるを参考にして対処。
情報元の皆様、非常に助かります。ありがとうございます。

  1. index.php をコピーして edit.php を作る
  2. .htaccess で edit.php にBasic認証を掛ける (下記参照)
  3. edit.php 内に、define('EDIT_OK','yes'); を記述
  4. lib/auth.php の中の function basic_auth の中の
    if (empty($user_list)) return TRUE; // No limit
    の行を
            if (empty($user_list)){
                    return TRUE; // No limit
            } elseif ( mb_ereg_match( "^ほげほげ", $target_str)) {
                    // 「ほげほげ」のところは、認証制限の対象に
                    // したくないページのキーワードを入れるとよい
                    return TRUE; // No limit
            }
    として、さらに下記の
    $auth_flag = FALSE;
    if(defined('EDIT_OK') and isset($_SERVER['REMOTE_USER']))
    {
       $_SERVER['PHP_AUTH_USER'] = $_SERVER['REMOTE_USER'];
       $_SERVER['PHP_AUTH_PW'] = 'pass';
    }
    を追加。
  5. pukiwiki.ini.php の $auth_user 定義ではパスワードをすべて 'pass' にしておく
    もちろん実際のパスワードは、edit.php のBasic認証で設定したものを入力する。
  6. ib/init.php に下記の行頭に「+」がある箇所を追加。
    /// 280行目ぐらい
     $arg = input_filter($arg); // \0 除去
     
    +if (!defined('EDIT_OK') && ereg('^cmd=edit&', $arg)) {
    +	pkwk_headers_sent();
    +	$parse_url = parse_url($script);
    +	$script_url = $parse_url['pass'];
    +	header('Location: ' . $script_url . 'edit.php?' . $arg);
    +	exit;
    +}
     
     // unset QUERY_STRINGs
     foreach (array('QUERY_STRING', 'argv', 'argc') as $key) {

なにかコメントがありましたらこちらから

  • スパム書き込みがあったので削除。 -- kimita 2008-06-29 (日) 01:09:33
  • スパム書き込みがあったので削除。 -- kimita 2008-06-28 (土) 09:22:49
  • スパム書き込みがあったので削除。 -- kimita 2007-09-20 (木) 03:25:10
トップ   差分 バックアップ リロード   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS