Pukiwiki 1.5.2 キターので、早々に更新してみた（EUC⇒UTFにもしてみた）

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

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

>+ [CentOS6 / PukiWiki設定の巻](http://www.sea-bird.org/pukiwiki/index.php?CentOS6%20%2F%20PukiWiki%C0%DF%C4%EA%A4%CE%B4%AC)

# 更新手順
utf-8 / euc 版の２つがありますのでどちらかを[ダウンロード](http://sourceforge.jp/projects/pukiwiki/releases/)します。zip 形式になっているので unzip コマンドで解凍します。解凍したら ```/var/www/html/``` 以下にコピーするだけです。※私は、```/var/www/html/pukiwiki``` で管理しているので、そこにコピーしてます。
また元の pukiwiki は、必ずバックアップしておきましょう。

```bash: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
```

# 設定ファイルと記事ディレクトリのコピー
こちらは簡単

```bash: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でアップロードできる容量を増やしとく

```text:(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
```

```text:(pukiwikiディレクトリ)/plugin/dump.inc.php 
// 最大アップロードサイズ
define('PLUGIN_DUMP_MAX_FILESIZE', 1024); // Kbyte
↓
define('PLUGIN_DUMP_MAX_FILESIZE', 51200); // Kbyte
```

PHP側の設定 

```text:/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 を変更します。

```text:(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

```bash:cmd
# chown -R apache:apache pukiwiki
```

# HTTPの応答ヘッダーに含まれるPHPバージョンを隠す
今は何かと情報を公開しているとヤラレルのでこういう情報も伏せておきます。

>+ [HTTPの応答ヘッダーに含まれるPHPバージョンを隠す方法](https://serverlog.jp/php-header-version/)

```text:/etc/php.ini
expose_php = On
↓
expose_php = Off
```

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

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

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

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

```text
<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のソースがあるのでそれを利用するといい。

[データの文字コード変換（不完全）](http://murayama-lab.ed.shizuoka.ac.jp/?CompTips/Linux)

```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 も捨てがたいんですよね。