2012年8月22日水曜日

pukiwiki の php5.4 対応へ

[ 注意 ] 2016-02-16

この記事の内容は古くなっています。
この記事にあるように pukiwiki 1.4.7 を改変して PHP5.4 〜 5.6 へ適用するのではなく、pukiwiki 1.5.0 へアップグレードすることをお奨めします。
PukiWiki 1.5.0 へアップグレード
http://near-unix.blogspot.jp/2016/02/pukiwiki.html

以前サーバーの php を php5.3 から php5.4 へアップグレードしたところ、pukiwiki で作ったページが真っ白になってしまう症状になってしまいました。

ネット上を検索すると php の仕様変更によるものだそうです。しかし pukiwiki は長くメンテナンスが行われた形跡もなく、他の pukiwiki ユーザーは手動で pukiwiki のコードを修正して対応していることが判明しました。

私は、コードを修正するのも面倒くさいので、アップグレードした php をダウングレードして対応するという超ネガティブな方法を採りました。しかし FreeBSD なサーバーで毎日のようにある ports のアップグレードやアップデートに対応するには大変面倒になってきました。時々間違って php もアップグレードしてしまって、pukiwiki のページが真っ白になってしまうことが度々ありました。

そしてもう諦めて、pukiwiki で最低限必要なページだけはブラウザで保存をして、php5.3 から php5.4 へアップグレードしてしまいました。

しばらくブラウザで保管したページを使って日頃の仕事をこなしていましたが、さすがに無理が来たようで、何らかの対応を正式にしなければならない状況となってしまいました。

方法としては、ports にある php5.3 の ports の lang.php53 をインストールして、もう新しい php へ対応しない方法か、pukiwiki のコードを修正して php5.4 へ対応させるかの選択となってしまいました。

今回私が採った方法は pukiwiki のコードを修正する方法としました。ネット上でいくつかの対応策が紹介されることもあり、私にも対応できると判断したからです。

以下は実際に私が行った作業を備忘録として記述しておきます。

まず pukiwiki の公式サイトから utf-8 コードに対応したソースコードをダウンロードしてきました。

pukiwiki-1.4.7.notb_utf8.zip

ダウンロードしたソースコードを解凍した後、以下の URL の内容を参照しながらソースコードを修正してゆきました。当該ブロガー様、大切な情報ありがとうございます。

[PHP] PHP5.4でpukiwikiを動かす
http://digape.com/201205/php-php5-4%E3%81%A7pukiwiki%E3%82%92%E5%8B%95%E3%81%8B%E3%81%99/

martianの日記: PHP5.4 と PukiWiki
http://slashdot.jp/journal/548548/PHP5.4-%E3%81%A8-PukiWiki

具体的には次の通りです。

(1) lib/func.php
「hex2bin」をコメントアウトして削除しました。
// Inversion of bin2hex()
/* 以下コメントアウト
function hex2bin($hex_string)
{
       // preg_match : Avoid warning : pack(): Type H: illegal hex digit ...
       // (string)   : Always treat as string (not int etc). See BugTrack2/31
       return preg_match('/^[0-9a-f]+$/i', $hex_string) ?
               pack('H*', (string)$hex_string) : $hex_string;
}
*/

(2) plugin/ls2.inc.php
s2プラグインの関数呼び出し時の参照渡しを修正しました。
array_walk($args, 'plugin_ls2_check_arg', & $params);
      ↓
array_walk($args, 'plugin_ls2_check_arg', $params);

(3)
lib/convert_html.php
lib/link.php
lib/init.php

new の返り値のキャストの変更しました。「& new」を「new」へ変更

以上を修正したものを、従来からある pukiwiki のディレクトリへ上書きインストールしました。

これで pukiwiki のヘルプなどが日本語表示となりましたが、肝心の本体の中身は英文などは表示されますが、日本語が表示されてしまい状況です。これは今まで EUC-JP コードで本文を記述しているためで、この EUC-JP コードを UTF-8 コードへ変換する必要があります。

FreeBSD ではユーザー領域のウェブサイトも apache で管理されている場合、ファイルは www ユーザーで管理されています。一般のユーザーではファイルの修正や上書きが出来ないことをに注意して作業が必要です。

私の場合、pukiwiki の記述データの入ったディレクトリの wiki を丸ごとダウンロードして作業用デスクトップパソコン (debian/squeezw) で EUC-JP から UTF-8 コードへファイルを変換して、元のサーバーに戻す方法としました。

データファイルを EUC-JP から UTF-8 コードへ変換するのは nkf を使用しました。
端末でデータの入った wiki ディレクトリへ入った後、次のコマンドで一括変換しました。
nkf -w --overwrite *.txt

この UTF-8 コードへ置き換えたファイルをアップロードして、ようやく pukiwiki は以前のように表示をするようになりました。

これで pukiwiki は何らかのエラーを吐きながらも動作している状況となりました。しかし今後のことを考えるとあたらしい wiki システムへ乗り換える必要があるように感じました。

0 件のコメント:

コメントを投稿

注: コメントを投稿できるのは、このブログのメンバーだけです。