PukiWikiのファイル配置

PukiWikiの記事が続いたついでに、ファイル配置についての覚書を書いておく。
ファイル群は以下の4種類に分けられる。

(1) インストール用ドキュメントで実行時に不要なもの
    README.txt 等
(2) 直接ブラウザから参照されるもの
    .htaccess index.php image/* skin/*(*.skin.phpを除く)
(3) 直接ブラウザから参照されないライブラリ(PukiWiki本体スクリプト)
    lib/* 
(4) 直接ブラウザから参照されない設定ファイルやデータ等
    *.ini.php *.lng.php plugin/* skin/*.skin.php
    wiki/* atatch/* backup/* cache/* counter/* diff/*


配置だが、(2) は当然ながらWWWサーバーが表示可能な場所、つまり、~/public_html とか ~/www とか*1またはそのサブディレクトリに置く必要がある。

(3) はブラウザから直接参照されないので、~/public_html 以下に置く必要は無い。~/lib 等に置いて、その絶対パスを、index.php で LIB_DIR に定義する。

(4) もブラウザから直接参照されないので、~/data などに置く。またその絶対パスを、index.php で DATA_HOME に定義する。


複数のWikiを設置する場合(WikiFarm)は、(3)は共用できる。(2)もindex.php等の起動元スクリプト以外は共用できる。(4)は必要なだけ別ディレクトリにコピーして、そのパスをそれぞれの起動元となる index.php で DATA_HOME に定義する。その複数の index.php はサブディレクトリを分けてもいいし、index2.php 等と名前を変えてもいい。
(4)の中でも本来はプラグインやスキンは共用できてもいいように思うが、現状の1.4.6段階では分けるようになっている。おそらく、プラグインの設定をそのプラグインファイルの中に書くようになっているので単純には分けられないのだろう。複数のプラグインディレクトリを探索するようになっていると設定変更したものだけ個別に置けばいいので、それ以外のものは共用できるのだが。いや、プラグイン中の定数定義を「定義されてなければ定義する」ようにして、pukiwiki.ini.phpプラグイン用の定数も定義するようにすればいいか。いずれにせよ WikiFarm についてはいずれは本格対応されると思うのでそれを待つことにする。


なお、pukiwiki.ini.phpプラグイン等をWWWサーバーから直接参照出来る場所に置いた場合は、拡張子に注意が必要である。標準の .htaccess では、"\.(ini\.php|lng\.php|txt|gz|tgz|zip)$" にマッチするファイルは参照出来ないようにしてあるが、.bak や .old 等と古いものを拡張子を変えて保存しておくと、それらは参照できてしまうので、ユーザ名・パスワード・メールアドレスなどが漏洩する。上記のようなファイル配置にすれば問題ないが、レンタルサーバーの都合で、WWWサーバーから参照不可能な場所が無い場合は、.htaccess を修正してそれらも参照不能になるようにする必要がある。うーん、count/* や cache/* なんかも保護したほうがいいような。

*1:サーバーの設定によって異なる