> ホーム > Web ページを作る > PukiWiki 設定メモ

PukiWiki 設定メモ

PukiWiki が 1.4.4 で中身が整理されたので、改めて自分用にまとめたついでにここに置いておきます。

Wiki そのものについては説明する気はありません。結城さんのWiki入門の第1章が PDF で読めますのでまずはこれを読んでください。できれば自由に参加できる Wiki を見つけて練習するのがいちばんなのですが、普通はちょっと気後れするでしょう。

本にも書いてありますが、Wiki をレンタルできるサービスもあるのでまずどんなものかを知りたければそういったサービスを利用するのも手です。

First Edition: 2004-12

配置

具体的な設定方法は pukiwiki.ini.php のところを参照のこと。

基本

PukiWiki は以下のようなディレクトリ構成で配布されている。

.
|-- attach
|-- backup
|-- cache
|   `-- entities.dat
|-- counter
|-- default.ini.php
|-- diff
|-- en.lng
|-- image
|   `-- face
|-- index.php
|-- ja.lng
|-- keitai.ini.php
|-- lib
|-- plugin
|-- pukiwiki.ini.php
|-- pukiwiki.php
|-- rules.ini.php
|-- skin
|-- trackback
`-- wiki

で、これをとりあえず

場所に展開するだけで動く。この構造を変えたい場合は pukiwiki.ini.php で設定する。

注意

[ ↑ contents ↑ ]

データをブラウザから見えない場所に置く

普通、CGI スクリプトのドキュメントにはブラウザから見えない場所にデータ類を置けとこういう設定にしろと書いてある。しかし Wiki はもともと情報を共有するためのものであるからか、あまりそういう設定にうるさい説明を読んだことはない。やるとすればこんな感じか。

.
|-- data
|   |-- attach
|   |-- backup
|   |-- cache
|   |-- diff
|   `-- wiki
`-- pukiwiki_pub
    |-- image
    |-- lib
    |-- plugin
    `-- skin

複数の Wiki の共通部品をまとめる

これは絶対に便利だと思う。Wiki 上の文書が増えてくると、案外整理しにくいというか扱いにくいというか、これはさすがに分類した方がいいなぁと思えてくる。このとき

など、Wiki によってできることとできないことがあるが、おおむね上のような機能を使って整理することなると思う。しかしいちばん大胆でシンプルでしかし基本的な機能だけで実現できる整理方法は Wiki を分割してしまうことである。必要なら InterWikiName を利用してうまく結びつけてやればよい。

WikiFarm の機能があればそれを利用するのがいちばん簡単なんだけど。

.
|-- modules
|   |-- lib        こっちでまとめても
|   `-- plugin     いいし
`-- pukiwiki_pub
    |-- image
    |-- lib        ここで
    |-- plugin     まとめてもいい
    |-- skin
    |-- wikiA
    |-- wikiB
    |-- wikiC
    `-- wikiD

[ ↑ contents ↑ ]

私は以下のように設定しておくべきだと思っています。

index.php

  1. ブラウザのアクセスするファイルは従来 pukiwiki.php しかなかったが、今回は index.php が出現した。
  2. しかし pukiwiki.php を include するだけにしておけばいいのに独自に設定を持てるようになってしまった。
  3. つまり下手をすると index.php にアクセスしたときと pukiwiki.php にアクセスしたときで設定が変わってしまう可能性がある。

ということで index.php の中身は

<?php
include( 'pukiwiki.php' );
?>

にしておく。

pukiwiki.ini.php

ディレクトリ位置

// データ格納ディレクトリ
define('DATA_DIR',      DATA_HOME . 'wiki/');   // 最新のデータ
define('DIFF_DIR',      DATA_HOME . 'diff/');   // 差分ファイル
define('BACKUP_DIR',    DATA_HOME . 'backup/'); // バックアップ
define('CACHE_DIR',     DATA_HOME . 'cache/');  // キャッシュ
define('UPLOAD_DIR',    DATA_HOME . 'attach/'); // 添付ファイル
define('COUNTER_DIR',   DATA_HOME . 'counter/');        // カウンタ
define('TRACKBACK_DIR', DATA_HOME . 'trackback/');      // TrackBack
define('PLUGIN_DIR',    DATA_HOME . 'plugin/'); // プラグインファイル

せっかく 1.4.4 でまとまった lib ディレクトリについて、場所を指定することができない。しかしこの lib ディレクトリの内容は

ので、複数の Wiki で共用できた方が嬉しい。設定項目がないので plugin ディレクトリと一緒にしておいて、PLUGIN_DIR を利用するのが吉。例えば FreeBSD 的には

/usr/local/share/pukiwiki/lib/
/usr/local/share/pukiwiki/plugin/

な辺りになると思う。Windows だったら

C:\pukiwiki\lib     共通部品
C:\pukiwiki\plugin
D:\wiki             データ

みたいな構成もアリかと。また、必要ならこれも

define('IMAGE_DIR', 'image/');

定義しておく。

[ ↑ contents ↑ ]

$script

以下のようにすべし。

list( $script, $query ) = split( '\?', $_SERVER['REQUEST_URI'] );

[ ↑ contents ↑ ]

お好み設定

以下は好みの問題と、印刷用 CSS を作るときの都合により設定したものです。

default.ini.php

// 雛形とするページの読み込みを表示させる
$load_template_func = 0;

負荷になるので外す。

// 関連するリンクを常に表示する(負担がかかります)
$related_link = 0;

負荷になるしページが増えると見にくいので外す。

// $_ul_left_margin = 0;   // リストと画面左端との間隔(px)
// $_ul_margin = 16;       // リストの階層間の間隔(px)
// $_ol_left_margin = 0;   // リストと画面左端との間隔(px)
// $_ol_margin = 16;       // リストの階層間の間隔(px)
// $_dl_left_margin = 0;   // リストと画面左端との間隔(px)
// $_dl_margin = 16;        // リストの階層間の間隔(px)
// $_list_pad_str = ' class="list%d" style="padding-left:%dpx;margin-left:%dpx"';
$_list_pad_str = ' class="list%d"';

ピクセル単位で指定してしまうのは感心しないのでこれを外す。

// 大・小見出しから目次へ戻るリンクの文字
//$top = $_msg_content_back_to_top;

見出しから戻れるのはちょっと妙な感じがする(仕方ないとは思うけど)のでこれを外す。

[ ↑ contents ↑ ]

attach.inc.php

各種設定がファイルの先頭辺りで行えるようになった。

// Max file size for upload on script of PukiWikiX_FILESIZE
define('MAX_FILESIZE', (1024 * 1024 * 10)); // default: 1MB
// ファイルのアクセス権
define('ATTACH_FILE_MODE', 0644);
//define('ATTACH_FILE_MODE', 0604); // for XREA.COM

group の permission を落とさなきゃいけないところは案外あるような気がする。

添付ファイルの mime type は :config/plugin/attach/mime-type というページで設定する。

        if ($footer) // フッタ
        {
                $ret = <<<EOD
<div class="navi_footer"><hr class="full_hr" />
<ul class="navi">

 <li class="navi_left">{$navi[$home]['prev1']}<br />{$navi[$home]['prev']}</li>
 <li class="navi_right">{$navi[$home]['next1']}<br />{$navi[$home]['next']}</li>
 <li class="navi_none">{$navi[$home]['home1']}<br />{$navi[$home]['up']}</li>

</ul></div>
EOD;
        }

フッタを特定する div を設定しておくと、CSS でそこだけスパッと消すことができる。navi プラグインを利用した階層構造のページを記述しておき、これを印刷したくなった場合などに有用なテクニック。

[ ↑ contents ↑ ]

tracker.inc.php

通常の編集ページでは s の accesskey が設定されているのにここだけ設定されていないのはなんか気持ち悪いので。

class Tracker_field_submit extends Tracker_field
{
        function get_tag()
        {
                $s_title = htmlspecialchars($this->title);
                $s_page = htmlspecialchars($this->page);
                $s_refer = htmlspecialchars($this->refer);
                $s_config = htmlspecialchars($this->config->config_name);

                return <<<EOD
<input type="submit" value="$s_title" accesskey="s" />

$script を http から絶対 URI で指定していない場合、つまり 前述の $script の設定の場合は以下の設定が必要

       function replace_title($arr)
       {
         global $script;
         $self = 'self:';
               return "[[$title$arrow>$self?plugin=tracker_list&refer=$r_page&
                       config=$r_config&list=$r_list&order=$r_order]]";
       }

return は実際には一行で。そして InterWikiName に

 [./ self] raw

と書いておく。

[ ↑ contents ↑ ]

showrss.inc.php

var $class = ' class="small"';

という記述がそこかしこにあるのでこれを削る。か。CSS の側で .small を削る。気持ちは分かるんだけど、どっか設定を一箇所に固めて手軽に on/off できるようにしといてほしかった。

auth.php

これはプラグインじゃないです。

if (edit_auth($page,$auth_flag,$exit_flag) and is_editable($page))
{
        return TRUE;
}

ここの if に適当に条件を増やしてやると、例えば特定のサイトに設置している場合だけ編集可能とか、そういう設定が可能。まぁ pukiwiki.ini.php にユーザー追加して認証掛ける方がまっとうだとは思うけど、ローカルに持ってきたバックアップを見ていて思わずそのまま編集しそうになったとか、そういう事態を防げるかも。

[ ↑ contents ↑ ]

agent 別対応

開発日記/2003-02-21 - PukiWiki-dev より

要するに

もの。転送量の制限をこの ini ファイルの中で max_size として定義、利用可能。

必要なものは

これで現在(2003-04-11)本家では用意されていない EZweb 用の skin や w3m 用の skin を用意可能。

ほか

[ ↑ contents ↑ ]

CSS

いじりすぎててよく分からないけど、方針としては

[ ↑ contents ↑ ]