使用法 - v1.25

Table of Contents

プラグイン設定項目一覧

必要ならば変更できる設定項目です。 dump2html.inc.php を開いて以下の部分を編集してください。

CONF['DUMPDIR']             = DATA_HOME . 'html/';
CONF['ADMINONLY']           = TRUE;
CONF['BLOCK_ADMINONLY']     = TRUE;
CONF['REDIRECT_AFTER_DUMP'] = FALSE;
CONF['SPECIAL_PAGES']       = array('RecentChanges', 'RecentDeleted');
default_options['method']     = 'http'; // 'http' or 'dump'
default_options['overwrite']  = FALSE;
default_options['treedump']   = TRUE;
default_options['format']     = TRUE;
default_options['urlstyle']   = 'relative'; // 'relative' or 'absolute'
default_options['noreadauth'] = TRUE;
default_options['username']   = ''; // for BasicAuth in the case of 'http'
default_options['userpass']   = '';
  • DUMPDIR
    • HTML ファイル出力先の設定です。
  • ADMINONLY
    • デフォルトではアクション型で一括ダンプの際に管理者権限を必要とします。FALSE にすることで無効にもできます。
  • BLOCK_ADMINONLY
    • ブロック型でも管理者権限を必要とするかどうかを設定します。念のためデフォルトでは有効になっていますが、ダウンロード後すぐに無効にするかもしれません。
  • REDIRECT_AFTER_DUMP
    • ブロック型や書き込み時自動ダンプで、ダンプ後 html ファイルに飛びます。デフォルトではオフになっています。
  • SPECIAL_PAGES
    • ブロック型や書き込み時自動ダンプで、対象ページがダンプされると同時に、常にダンプしなおすページです。
  • method=dump|http (Dump Internally | HTTP GET)
    • dump: 内部的に pukiwiki の関数を呼び html 出力を取得。
    • http: サーバ上から同サーバに HTTP アクセスを行い pukiwiki の html 出力を取得。
  • overwrite=bool (Force to Overwrite)
    • 強制上書き。off の場合、html ファイルと wiki ページのタイムスタンプを比べ wiki ページが新しければ上書きダンプします。
  • treedump=bool (Treedump)
    • 静的 HTML ファイル名にディレクトリ階層を使用(例:ページ Hoge/ほげ → Hoge/E381BBE38192.html)。off の場合、一階層に保存(例:ページ Hoge/ほげ → Hoge27E381BBE38192.html)。
  • format=bool (Modify Links)
    • リンク置き換え処理を行う。未チェックの場合ダンプだけで終了。
  • urlstyle=relative|absolute (relative url | absolute url)
    • relative: リンク置き換え処理の際に相対URLを使用
    • absolute: リンク置き換え処理の際に絶対URLを使用
  • noreadauth=bool (Dump read-restricted pages)
    • 閲覧制限されているページもダンプ。
      補足: ダンプされた html ファイルを同様に閲覧制限したい場合はは各自 .htaccess を編集して pukiwiki とは別に閲覧制限する必要があります(解説はしません)。
  • username (Username for read-restricted pages for HTTP GET)
    • 閲覧制限ページ用ユーザ名。閲覧制限されているページを HTTP GET で取得する際にユーザ名、パスワードが必要になります。
      補足: この機能を使用する場合 PEAR の HTTP/Request.php が必要になります(インストール方法の解説はしません)。
  • userpass (Userpass)
    • Username に対するパスワード。

おまけ:ユーザ設定ファイル

設定を別ファイルに分離しておけます。プラグインアップデートの際に楽です。

plugin ディレクトリなどと同階層に init ディレクトリを作成、そのディレクトリに以下のファイルを保存し、編集してください。(Pukiwiki Plus! i18n の場合は init ディレクトリがデフォルトで存在するはずです。) サンプルのようなものなので、必要に応じて項目を追加してください。

dump2html.ini.php

How to use

一括ダンプ(アクション型)

アクション型プラグインとしてアクセスしてください。

http://あなたのPukiWikiサイト/index.php?cmd=dump2html

cmd=dump2html

項目は以下の意味です。

  • Admin Password
    • 管理者パスワード
  • Filter Pages (ereg)
    • 対象ページを絞りこむときに使用。指定しなければ全ページ。
  • A Page
    • 特定の1ページだけ指定するときに使用。
  • Force to Overwrite
    • 強制上書き。未チェックの場合、html ファイルと wiki ページのタイムスタンプを比べ wiki ページが新しければ上書きダンプします。

以下の補助オプションはテスト用です。dump2html.inc.php を直接編集し、デフォルト値を変更したほうが使いやすいでしょう。

  • Treedump
    • 静的 HTML ファイル名にディレクトリ階層を使用(例:ページ Hoge/ほげ → Hoge/E381BBE38192.html)。未チェックの場合、一階層に保存(例:ページ Hoge/ほげ → Hoge27E381BBE38192.html)。
  • Modify Links
    • リンク置き換え処理を行う。未チェックの場合ダンプだけで終了。
  • relative url
    • リンク置き換え処理の際に相対URLを使用
  • absolute url
    • リンク置き換え処理の際に絶対URLを使用
  • Dump Internally
    • 内部的に pukiwiki の関数を呼び html 出力を取得。
  • Dump read-restricted pages
    • 閲覧制限されているページもダンプ。
      補足: ダンプされた html ファイルを同様に閲覧制限したい場合はは各自 .htaccess を編集して pukiwiki とは別に閲覧制限する必要があります(解説はしません)。
  • HTTP GET
    • サーバ上から同サーバに HTTP アクセスを行い pukiwiki の html 出力を取得。
  • Username for read-restricted pages
    • 閲覧制限ページ用ユーザ名。閲覧制限されているページを HTTP GET で取得する際にユーザ名、パスワードが必要になります。
      補足: この機能を使用する場合 PEAR の HTTP/Request.php が必要になります(インストール方法の解説はしません)。
  • Userpass
    • Username に対するパスワード。

参照時自動ダンプ(ブロック型)

編集後の読み込み時に自動で html 変換させます。

書き込み時自動ダンプのほうをおすすめします。よって、このブロック型機能は将来無くなる可能性があります。

CONF['BLOCK_ADMINONLY'] が TRUE の場合、管理者パスワードはクッキーから取得します。 つまり、アクションプラグイン形式で一度パスワードを保存させてはじめて有効になります。 CONF['BLOCK_ADMINONLY'] が FALSE の場合は、その辺を気にする必要はありません。

書式

#dump2html([オプション])

オプション

  • 設定/オプション のほうを参照してください(怠けさせてください)。
  • option=bool なオプションは option, option=true, option=on で有効に、option=false, option=off で無効になります。
  • オプション overwrite は現在未対応です。

書き込み時自動ダンプ(本体改造)

全頁に1つずつブロック型を記入するのは大変なので、各ページを書き込み時に自動的にダンプするようにします。ページ書き込みがトリガになるので、ブロック型とは違い、「タイムスタンプを変更しない」更新でもダンプされます。

できるだけ Pukiwiki 本体には手をいれないように頑張ってきたのですが、本体に手をいれるしかなさそうです。

lib/file.php#page_write 関数の末尾に

	log_write('update',$page);
+	if (exist_plugin('dump2html')) {
+		do_plugin_init('dump2html');
+		plugin_dump2html_write_after($page);
+	}

を追加します。

用途別本体&プラグイン設定

html バックアップ

wiki ページを html ファイルとしてバックアップを取っておき、pukiwiki が稼動するウェブサーバがなくても参照できるようにする。

  1. dump2html.inc.php を plugin ディレクトリにダウンロード。
  2. html ファイルが保存されるディレクトリ(デフォルトでは wiki ディレクトリと同階層の html ディレクトリ)を作成、書き込み許可を出す。
  3. 一括ダンプ(アクション型)する。
  4. ダンプ先ディレクトリ、skin, image ディレクトリを大事にとっておく。

html 公開負荷軽減(PukiWiki Plus!)

ユーザには html ファイルにアクセスして閲覧してもらい、編集時には、編集→自動ダンプ→htmlファイルに自動リダイレクト、となるように設定、改造する。

  1. dump2html.inc.php を plugin ディレクトリにダウンロード。
  2. html ファイルが保存されるディレクトリ(デフォルトでは wiki ディレクトリと同階層の html ディレクトリ)を作成、書き込み許可を出す。

3. plugin ディレクトリと同階層の init ディレクトリ(なければ作成)に dump2html.ini.php を以下の内容で作成

<?php
exist_plugin('dump2html');
$plugin = new PluginDump2html();
$plugin->CONF['REDIRECT_AFTER_DUMP'] = TRUE;
?>

4. html ファイルから css, javascript 等を参照できるように絶対アドレスに変更する。

pukiwiki.ini.php

-define('ROOT_URI', '');
+define('ROOT_URI', 'あなたのPukiWikiサイト絶対アドレス/');
define('SKIN_URI', ROOT_URI . SKIN_DIR);
define('IMAGE_URI', ROOT_URI . IMAGE_DIR);

5. 書き込み時自動ダンプ(本体改造) を行っておく

6. 一括ダンプ(アクション型)しておく。

html 公開負荷軽減(PukiWiki 本家またはPlus!)

ユーザには html ファイルにアクセスして閲覧してもらい、編集時には、編集→自動ダンプ→htmlファイルに自動リダイレクト、となるように設定、改造する。

PukiWiki 本家には Plus! にはある SKIN_URI, IMAGE_URI の仕組みがなく、javascript, css へのアドレスをうまく絶対アドレスに変更することができない(考察参照)。 発想の転換で、html ファイル群を index.php と同階層に出力し、 SKIN_DIR, IMAGE_DIR の設定を変更せずにすむようにする。

  1. dump2html.inc.php を plugin ディレクトリにダウンロード。
  2. index.php のあるディレクトリに書き込み許可を出す。

3. plugin ディレクトリと同階層の init ディレクトリ(なければ作成)に dump2html.ini.php を以下の内容で作成

<?php
exist_plugin('dump2html');
$plugin = new PluginDump2html();
$plugin->CONF['REDIRECT_AFTER_DUMP'] = TRUE;
$plugin->CONF['DUMPDIR'] = '';
$plugin->default_options['treedump'] = FALSE;
?>

#このとき、pukiwiki.ini.php で index.php が省略される設定になっていないことを確認する($script_directory_index の行をコメントアウト)。 index.html が index.php と同階層に出力されるが、その場合通常は index.php よりも index.html が優先されるため、index.php を省略できなくなる。

4. 書き込み時自動ダンプ(本体改造) を行っておく。

5. 一括ダンプ(アクション型)しておく。

6. おまけ - index.php の移動

ただ、これだけでは、pukiwiki のファイルと html ファイルが同階層でごちゃごちゃになってしまうため、それが気になる場合は、pukiwiki ファイル群を下位ディレクトリにまとめて、

index.php
pukiwiki/ぷきウィキファイル群

となるような構成にすると少しはすっきりする。ファイル群を移動し、設定ファイルを編集します

Plus!

index.php

-define('SITE_HOME',     '');
-define('DATA_HOME',     '');
+define('SITE_HOME',     'pukiwiki/');
+define('DATA_HOME',     'pukiwiki/');

pukiwiki.ini.php

-define('SKIN_DIR', 'skin/');
-define('IMAGE_DIR', 'image/');
+define('SKIN_DIR', DATA_HOME . 'skin/');
+define('IMAGE_DIR', DATA_HOME . 'image/');

本家

index.php

-define('DATA_HOME', '');
-define('LIB_DIR',   'lib/');
+define('DATA_HOME', 'pukiwiki/');
+define('LIB_DIR',   'pukiwiki/lib/');

pukiwiki.ini.php

-define('SKIN_DIR', 'skin/');
-define('IMAGE_DIR', 'image/');
+define('SKIN_DIR', DATA_HOME . 'skin/');
+define('IMAGE_DIR', DATA_HOME . 'image/');

default.ini.php

-define('SKIN_FILE', DATA_HOME . SKIN_DIR . 'pukiwiki.skin.php');
+define('SKIN_FILE', SKIN_DIR . 'pukiwiki.skin.php');

おまけ

出力HTMLファイル名の変更(プラグイン改造)

出力されるHTMLファイル名が気にいらない時には dump2html.inc.php 中 PKWKHtmlLinkModifier クラスの encode, r_encode 関数を編集します。

encode 関数が treedump = FALSE 用、r_encode 関数が treedump = TRUE 用です( / を使用する)。現在は次のようになっています。

    function &encode(&$str)
    {
        $str = rawurlencode($str);
        $str = str_replace('%', '', $str);
        return $str;
    }

    function &r_encode(&$str)
    {
        $str = rawurlencode($str);
        $str = str_replace('%2F', '/', $str);
        $str = str_replace('%', '', $str);
        return $str;
    }

考察記録(過去ログ)

オプション method=dump における本体改造

オプション method=dump では、dump2html 内部で Pukiwiki のスキン出力関数を実行し html を取得します。 Pukiwiki は一度の実行でただ一度のスキン出力しか想定してません。 なので複数回のスキン出力をサポートするように、Pukiwiki 本体の改造が必要になります。

こちらが最初の実装で、この文章はその時の名残りです。

現在はオプション method=http があります(デフォルト動作です)。 dump2html から http 経由で Pukiwiki の出力 html を取得します。 こちらは Pukiwiki の改造を必要としないのでお勧めです。 #ただ、内部出力メソッドに比べると遅く、サーバへの負荷もよりかかります。とはいえ、method=dump には後述の通り未解決問題もあるので外部出力メソッドを使用するのが現状での唯一解です。

本体改造

Comment out

static $called;

as

//static $called;

in pkwk_output_dtd function of lib/html.php.

Skin

本家 pukiwiki のデフォルトでは、スキン中で関数定義がしてあります。 スキン出力の際に何度もその関数が定義されるためエラーが出ますので対処が必要です。 Pukiwiki Plus! ではそれらに相当する関数がプラグイン化され、多重定義されないようになっているので改変は必要ありません。

pukiwiki.skin.php 中に

function _navigator($key, $value = '', $javascript = ''){
・
}
・
function _toolbar($key, $x = 20, $y = 20){
・
}

のような箇所があります。これを

if (! function_exists('_navigator')) {
function _navigator($key, $value = '', $javascript = ''){
・
}
}
・
if (! function_exists('_toolbar')) {
function _toolbar($key, $x = 20, $y = 20){
・
}
}

のように変更してください。

スキンはそれぞれのサイトで変更されていることと思いますので、変更後のスキンの配布は致しません。

未解決問題

前述のとおり、Pukiwiki は一度の実行でただ一度のスキン出力しか想定してません。 そのため、内部に static 変数が点在しており、dump2html の側でページダンプの直前に変数の初期化を行おうとしても不可能になっています。

例えば、一括ダンプの際に、複数ページを一括ダンプすると注釈の番号がリセットされず、次のページで持ち越しになります。

これらの問題を解決するには static 変数を全て global 変数に変更し、ページダンプの直前に変数の初期化を行う必要があるのですが、さらなる本体改造を要求するのは導入の敷居が高くなるためやりきれずにいます。

PukiWiki本家で javascript, css リンクを絶対アドレスに変更

PukiWiki 本家の場合 Plus! のように絶対アドレスに簡単に変えられる仕組みがない。次のようにしてみる。

pukiwiki.ini.php

-define('SKIN_DIR', 'skin/');
+define('SKIN_DIR', 'あなたのPukiWikiサイト絶対アドレス/skin/');
-define('IMAGE_DIR', 'image/');
+define('IMAGE_DIR', 'あなたのPukiWikiサイト絶対アドレス/image/');

default.ini.php

if (defined('TDIARY_THEME')) {
-    define('SKIN_FILE', DATA_HOME . SKIN_DIR . 'tdiary.skin.php');
+    define('SKIN_FILE', DATA_HOME . 'skin/' . 'tdiary.skin.php');
} else {
-    define('SKIN_FILE', DATA_HOME . SKIN_DIR . 'pukiwiki.skin.php');
+    define('SKIN_FILE', DATA_HOME . 'skin/' . 'pukiwiki.skin.php');
}

keitai.ini.php

- define('SKIN_FILE', DATA_HOME . SKIN_DIR . 'keitai.skin.php');
+ define('SKIN_FILE', DATA_HOME . 'skin/' . 'keitai.skin.php');

ほとんどのプラグインは SKIN_DIR の値を URI として使用しているはず。その場合は問題ないが SKIN_DIR の値をローカルでのパスとして使用しているプラグインがあると問題が起こる。例えば dump2html!など。それらを1つずつつぶしていかなければならない。結論:無理。

逆に SKIN_DIR, IMAGE_DIR はローカルのパスとして扱い、URI として扱っているプラグインや skin 中の値を変更していく方法もあるが、それでも同じく1つずつつぶしていかなければならないので、無理。ちなみに IMAGE_URI, SKIN_URI を定義し、1つずつつぶしていった結果が PukiWiki Plus! のコード。

ダンプ先ディレクトリについての考察

dump2html.inc.php にはリンク置換機能があり、 html ファイル相互のリンク、さらに、html ファイルから参照している javascript や css への相対アドレスも変換され、正しく参照できます。 しかし、その先の javascript が、例えば画像ファイルを参照している場合、その javascript を変換はしませんので、パスがずれて表示できない場合があります。

結局のところ、Pukiwiki そのものは index.php という1ファイルからのアクセスを想定して作られているので、それにあわせて、全てのファイルを index.php と同じ階層に保存するのが一番 Pukiwiki と親和性が高いです*1。#デフォルトの出力先を 'html' としていたのは、デフォルトで index.php と同じ階層に出力するとファイルがごちゃごちゃになってしまうため仕方なく、といった所です。

この設定は dump2html.inc.php 内で

CONF['DUMPDIR'] = '';
default_options['treedump'] = FALSE;

とすることで実現できます。ディレクトリに書き込み許可を出します。

#このとき、pukiwiki.ini.php で index.php が省略される設定になっていないことを確認してください($script_directory_index の行をコメントアウト)。 index.html が index.php と同階層に出力されますが、その場合通常は index.php よりも index.html が優先されるので、index.php を省略できません。

pukiwiki パッケージから index.php だけを上の階層に出して

index.php
pukiwiki/ぷきウィキファイル群

のような構成にすると少しはファイル構成がすっきりするかもしれません。

Compatibility Check

Please join us to check compatibilities.

Compatible

Selection Vote
PHP4 2
PHP5 2
1.3.7 3
1.4.3 0
1.4.4 2
1.4.5_1 0
1.4.6 1
1.4.7 8
1.4.5plus-eucjp 0
1.4.6plus-u1-eucjp 0
1.4.6plus-u2-eucjp 0
1.4.5plus-u2-i18n 0
1.4.6plus-u1-i18n 0
1.4.6plus-u2-i18n 0
1.4.7plus-i18n 4
1.4.7plus-u2-i18n 1

Incompatible

Selection Vote
PHP4 0
PHP5 1
1.3.7 0
1.4.3 0
1.4.4 0
1.4.5_1 1
1.4.6 0
1.4.7 1
1.4.5plus-eucjp 0
1.4.6plus-u1-eucjp 0
1.4.6plus-u2-eucjp 0
1.4.5plus-u2-i18n 0
1.4.6plus-u1-i18n 0
1.4.6plus-u2-i18n 0
1.4.7plus-i18n 0
1.4.7plus-u2-i18n 1

*1 いろいろと頑張ったのですが結局この結論に至ってしまいました