サーバ OS の更新と同時に PukiWiki が動作しなくなったので更新し,PHP のシステムの設定を修正する。
サーバの OS を更新したところ,PukiWiki 1.4.7 の表示が真っ白になってしまった。原因は,PHP のバージョンが上がったことと,デフォルトの文字コードが EUC-JP から UTF-8 になったことのダブルパンチだった。
OS 更新後は PHP 5.5 となった。PukiWiki の画面が真っ白になるのは,PHP 5.4 から組み込み関数となった hex2bin() が PukiWiki で独自に実装されている hex2bin() と衝突してしまっているのが原因とのこと (PukiWikiでページが真っ白になる事案が発生 → 解決 - DIMENSION 2.00)。この問題は PukiWiki の関数を書き換えることで解決できた (PukiWiki をPHP5.4に対応させる | サイト運営の私的メモ)。しかし,htmlspecialchars() の仕様変更により,デフォルトの動作が変更になったため,EUC-JP の場合は日本語が表示されないという現象が発生した。
この場合,PukiWiki のデータを EUC-JP から UTF-8 に変換するという方法があるが (EUC-JPからUTF-8への移行について - PukiWiki Plus!),長すぎるファイル名が存在したため変換に失敗。そこで,データを EUC-JP のままにして,htmlspecialchars() の第3引数に EUC-JP を指定するという方法をとることにした (PHP5.4のhtmlspecialcharsに非互換問題 | 徳丸浩の日記)。perl のワンライナーを使って一括変換を行い,lib/func.php に htmlspecialchars() を呼び出す関数を定義することでこの問題に対応することができた。
そして,その情報をブログの記事に書こうとして再チェックをしたところ,長年止まっていた PukiWiki の開発が今年の夏に再開され,この問題が上でとったものと同様の方法で解決されていたことを知った。頑張ってやった対応の方法は間違っていなかったことに救われたが,かけた時間はまるで無駄だった…_| ̄|○
気を取り直して,PukiWiki を更新する。
動作環境は,Vine Linux 6.2,PHP 5.5.17,Apache 2.2.27,更新前 PukiWiki 1.4.7,更新後 PukiWiki 1.5.0,文字コードは EUC-JP で更新後も EUC-JP のままとする。
PukiWiki/Download - PukiWiki-official から現時点の最新版である PukiWiki/Download/1.5.0 をダウンロードし,展開する。
データの移行は,ディレクトリ単位にコピーしていけばよい。
counter, trackback は使っていなかったので内容は index.html のみだった。skin ディレクトリには注意が必要。今回変更のあった htmlspecialchar() が使われていることがあるからである。内容を確認して,(ファイル丸ごとコピーではなく) 手作業で移行した方がよい。
pukiwiki.ini.php に関しては変更はないので,そのままコピーしてしまってもよい。
php ファイルをコピーする場合は,オリジナルのファイルを .org などをつけて保存しておくとよい。今回のようなバージョンアップの際に,現行と .org を比較して,違っている部分だけが確認できるので,手作業で移行先に反映するのが容易になるからである。
最後にリンクを張り直す。これは必須ではないが,バージョンが変わってもアクセスする先が同名なのは便利なのでお勧めしたい。wiki というシンボリックリンクが pukiwiki-1.4.7 を指しているとする。
リンクを作るときのコマンドは「ln -s (実体) (作るもの)」というように,コピーと同じ順番になると思うと覚えやすい。
移行作業は完了したが,項目を編集しようとすると「は有効な WikiName ではありません。」と表示される。これは,PHP の設定において,HTTP 入力文字のエンコーディングする際のデフォルトを指定する mbstring.http_input の値が「mbstring.http_input = auto」となっていることが原因だそうで (PukiWiki 1.4.7_notb: 日本語名ページが編集できない - Ellinikonblue.com Weblog),修正するにはシステムの php.ini か,ユーザの .htaccess を変更すればよいとのこと。このサーバではデフォルトを EUC-JP にする方針で決定しているので,システム全体の設定を変更することにする。/etc/php5/php.d/pukiwiki.ini ファイルを作成し,記述しておく。
Apache を再起動すれば完了である。ユーザレベルでは,.htaccess に次の記述を追加すればよいとのこと。
Master Archive Index
Total Entry Count: 1957