Pukiwiki 1.5.2 キターので、早々に更新してみた(EUC⇒U

4 min read読了の目安(約4000字

Pukiwiki って?

PHPで動作するウィキクローンの一つである。yu-jiが結城浩のYukiWikiをPHPに移植することで最初に開発し、」とあるように歴史は古いです。1.4.7以降メンテナンスというか更新されておらず php 5.4以降に対応していないので色々と派生ができちゃっていましたが、ようやく 2014/7/19 にアップされました~~。よかった。
※記事 1.5.0 -> 1.5.2 に更新しました

更新してみる

自前のサーバに入れてある pukiwiki が 1.4.7 なのでバージョンアップがてら更新してみます。
結果から言うと pukiwiki.ini.php も修正されていないので基本的には、設定ファイルと記事ディレクトリのコピーだけで更新が終わります。

更新手順

utf-8 / euc 版の2つがありますのでどちらかをダウンロードします。zip 形式になっているので unzip コマンドで解凍します。解凍したら /var/www/html/ 以下にコピーするだけです。※私は、/var/www/html/pukiwiki で管理しているので、そこにコピーしてます。
また元の pukiwiki は、必ずバックアップしておきましょう。

cmd
$ unzip pukiwiki-1_5_0_eucjp.zip
$ sudo cp -rp /var/www/html/pukiwiki /var/www/html/pukiwiki.old
$ sudo cp -rp pukiwiki-1_5_0_eucjp /var/www/html/pukiwiki

設定ファイルと記事ディレクトリのコピー

こちらは簡単

cmd
$ sudo su
# cd /var/www/html/pukiwiki
# sudo cp pukiwiki.old/pukiwiki.ini.php .
# sudo mv wiki wiki.old
# sudo cp -rp pukiwiki.old/wiki .

ついでに、pukiwikiでアップロードできる容量を増やしとく

(pukiwikiディレクトリ)/plugin/attach.inc.php
// max file size for upload on PHP(PHP default 2MB) 
ini_set("upload_max_filesize","2M");
↓
ini_set("upload_max_filesize","50M");

// Max file size for upload on script of PukiWikiX_FILESIZE
define('PLUGIN_ATTACH_MAX_FILESIZE', (1024 * 1024)); // default: 1MB
↓
define('PLUGIN_ATTACH_MAX_FILESIZE', (51200 * 1024)); // default: 50MB
(pukiwikiディレクトリ)/plugin/dump.inc.php
// 最大アップロードサイズ
define('PLUGIN_DUMP_MAX_FILESIZE', 1024); // Kbyte
↓
define('PLUGIN_DUMP_MAX_FILESIZE', 51200); // Kbyte

PHP側の設定

/etc/php.ini
memory_limit = 8M ; Maximum amount of memory a script may consume (8MB)
↓
memory_limit = 80M ; Maximum amount of memory a script may consume (80MB)

; Maximum allowed size for uploaded files.
upload_max_filesize = 2M
↓
upload_max_filesize = 50M

; Maximum size of POST data that PHP will accept. 
post_max_size = 8M
↓
post_max_size = 80M

ついでに

pukiwiki.ini.php ファイル
JavaScriptを有効 PKWK_ALLOW_JAVASCRIPT = 1 , Pukiwikiのハイライト表示を無効にする $nowikiname = 1 もしとくといいかもしれませんね。

pkwk_chown(): flock() failed が表示されるとき

(pukiwikiディレクトリ)/lib/file.php を変更します。

(pukiwikiディレクトリ)/lib/file.php
// NOTE: Not 'r+'. Don't check write permission here
//$ffile = fopen($filename, 'r') or
$ffile = fopen($filename, 'w+') or

Maybe permission is not writable or filename is too long が表示される場合

パーミッションが悪いですね。特に気にしなければ下記でok

cmd
# chown -R apache:apache pukiwiki

HTTPの応答ヘッダーに含まれるPHPバージョンを隠す

今は何かと情報を公開しているとヤラレルのでこういう情報も伏せておきます。

/etc/php.ini
expose_php = On
↓
expose_php = Off

Pukiwiki表示される情報にもphpのバージョンがw

PukiWiki 1.5.1 © 2001-2016 PukiWiki Development Team. Powered by PHP 5.x.x. HTML convert time: 0.065 sec.

ってでちゃっているので。ごっそり消してもいいかもしれませんねw

./skin/pukiwiki.skin.php
./skin/tdiary.skin.php

<div id="footer">
 Site admin: <a href="<?php echo $modifierlink ?>"><?php echo $modifier ?></a><p />
 <?php echo S_COPYRIGHT ?>.
 Powered by PHP <?php echo PHP_VERSION ?>. HTML convert time: <?php echo elapsedtime() ?> sec.
</div>

文字コードをEUC⇒UTFにしてみた

EUCのままでもよいのですが、システム全体をUTFにしている手前なんとなく気持ち悪いので実施してみる。文字バイトば増えることで容量も増えるのが許容量。でもpukiwikiを参照(リンク)されている場合は、リンク先が変更となるので注意が必要。

そんな訳?でファイルの文字コードの変換は簡単だが、pukiwikiのリンク先が、その言語コードでdecodeされた数値形式になっているので変換が必要(ここが EUC⇒UTF)。でその変換だけど下記のリンク先でPythonのソースがあるのでそれを利用するといい。

データの文字コード変換(不完全)

import os
import glob
import codecs

files = glob.glob("*.txt")
for f_euc in files:
    fname = f_euc[:len(f_euc) -4]
    f_utf8 = codecs.decode(fname, 'hex').decode('euc-jp').encode('utf-8').hex().upper() + ".txt"
    os.rename(f_euc, f_utf8)

Pukiwikiは

セキュリティの問題とかなければ使い続けるのですが、昔から使っている Pukiwiki も捨てがたいんですよね。