印刷用表示へ切り替え 通常表示へ切り替え 更新履歴を表示 更新履歴を隠す
Linux PukiWiki 1.4.7 EUC-JP を 1.5.0 EUC-JP に更新

サーバ 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 の更新

ダウンロードとインストール

PukiWiki/Download - PukiWiki-official から現時点の最新版である PukiWiki/Download/1.5.0 をダウンロードし,展開する。

移行

データの移行は,ディレクトリ単位にコピーしていけばよい。

$ cp -a pukiwiki-1.4.7/attach/* pukiwiki-1_5_0_eucjp/attach/
$ cp -a pukiwiki-1.4.7/backup/* pukiwiki-1_5_0_eucjp/backup/
$ cp -a pukiwiki-1.4.7/cache/* pukiwiki-1_5_0_eucjp/cache/
$ cp -a pukiwiki-1.4.7/counter/* pukiwiki-1_5_0_eucjp/counter/
$ cp -a pukiwiki-1.4.7/diff/* pukiwiki-1_5_0_eucjp/diff/
$ cp -a pukiwiki-1.4.7/trackback/* pukiwiki-1_5_0_eucjp/trackback/
$ cp -a pukiwiki-1.4.7/wiki/* pukiwiki-1_5_0_eucjp/wiki/

counter, trackback は使っていなかったので内容は index.html のみだった。skin ディレクトリには注意が必要。今回変更のあった htmlspecialchar() が使われていることがあるからである。内容を確認して,(ファイル丸ごとコピーではなく) 手作業で移行した方がよい。

pukiwiki.ini.php に関しては変更はないので,そのままコピーしてしまってもよい。

$ mv pukiwiki-1_5_0_eucjp/pukiwiki.ini.php pukiwiki-1_5_0_eucjp/pukiwiki.ini.php.org
$ cp -a pukiwiki-1.4.7/pukiwiki.ini.php pukiwiki-1_5_0_eucjp/pukiwiki.ini.php

php ファイルをコピーする場合は,オリジナルのファイルを .org などをつけて保存しておくとよい。今回のようなバージョンアップの際に,現行と .org を比較して,違っている部分だけが確認できるので,手作業で移行先に反映するのが容易になるからである。

最後にリンクを張り直す。これは必須ではないが,バージョンが変わってもアクセスする先が同名なのは便利なのでお勧めしたい。wiki というシンボリックリンクが pukiwiki-1.4.7 を指しているとする。

$ rm wiki
$ ln -s pukiwiki-1_5_0_eucjp wiki

リンクを作るときのコマンドは「ln -s (実体) (作るもの)」というように,コピーと同じ順番になると思うと覚えやすい。

「は有効な WikiName ではありません。」対策

移行作業は完了したが,項目を編集しようとすると「は有効な 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 ファイルを作成し,記述しておく。

# cat /etc/php5/php.d/pukiwiki.ini
mbstring.http_input = pass

Apache を再起動すれば完了である。ユーザレベルでは,.htaccess に次の記述を追加すればよいとのこと。

php_flag mbstring.encoding_translation off
php_value mbstring.http_input pass
Posted by n at 2014-11-06 22:26 | Edit | Comments (0) | Trackback(0)
Trackbacks

  • 「手違いで複数トラックバックを送ってしまった!」という場合でも気にしないでください (重複分はこちらで勝手に削除させていただきます)
  • タイムアウトエラーは,こちらのサーバの処理能力不足が原因です (詳細は トラックバック送信時のエラー をご覧ください)
  • トラックバックする記事には,この記事へのリンクを含めてください(詳細は 迷惑トラックバック対策 をご覧ください)
Comments
Post a comment
  • 電子メールアドレスは必須ですが,表示されません (気になる場合は「メールアドレスのような」文字列でもOKです)
  • URL を入力した場合はリンクが張られます
  • コメント欄内ではタグは使えません
  • コメント欄内に URL を記入した場合は自動的にリンクに変換されます
  • コメント欄内の改行はそのまま改行となります
  • 「Confirmation Code」に表示されている数字を入力してください (迷惑コメント対策です)


(必須, 表示されます)


(必須, 表示されません)


(任意, リンクされます)


Confirmation Code (必須)


Remember info (R)?