*

pukiwiki を PHP 5.4 に対応させる方法 (1)

公開日: : 最終更新日:2013/12/21 FreeBSD, Other unix, PHP

Seichanです.こんばんわ.
サーバの移行に伴い,PHP のバージョンが 5.3 から 5.4 に上がったのですが,それが原因で pukiwiki が真っ白に…
最新版の 1.4.7 でも対応出来ていなく,みんな個別に修正しているようです.

いっその事,他の wiki に移行しようかなぁ.なんて思ったのですが,他のものは高機能すぎたり,機能がたらなすぎたりなんかしっくりきそうな物がありませんでした.
pukiwiki の派生版として PukiWiki Plus! というのも見つけたのですが,これも PHP5.4 には未対応でした.
Pukiwiki Advance というものは PHP5.3 以降に対応.という事でこれは良いかも? と思ったのですが設置が微妙にめんどくさいなぁ… と.

という事で,Pukiwiki 1.4.7 の UTF-8 版を PHP5.4 に対応させることにしたのです.
# と言っても,あんまり大きな変更は無いのですけどね.

 SPONSORED LINK
 

1. エラーをちゃんと表示させる
Pukiwiki のデフォルト状態だと index.php のエラーレポート設定は下の通りになっています.

error_reporting(E_ERROR | E_PARSE);

これを下の通り,全部表示させます.

error_reporting(E_ALL);

2. Fatal error の hex2bin をやっつける
エラーレポートを E_ALL にした後にアクセスしてみるとこんなエラー表示が出てきます.

Fatal error: Cannot redeclare hex2bin() in /home/seichan/public_html/wiki/lib/func.php on line 317

PHP5.4 で hex2bin が組み込み関数になってしまい,Pukiwiki に収録されている関数とバッティングしてしまった事が原因です.Pukiwiki の hex2bin は PHP5.4 標準の物で問題なさそうなのでまるごとコメントアウトします.
lib/func.php の 311行 から 317行をまるごとコメントアウトします.該当箇所は下の通り.

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;
}

3. Fatal error の Call-time pass-by-reference をやっつける
#ls2 を使用するコンテンツへアクセスすると以下のようなエラーが表示されます.

Fatal error: Call-time pass-by-reference has been removed in /home/seichan/public_html/wiki/plugin/ls2.inc.php on line 69

PHP5.4 で関数への参照渡しが出来なくなったため has been removed と表示されてストップしてしまいます.
これは参照渡しではなく値渡しに変更することで対応出来ます.

plugin/ls2.inc.php function plugin_ls2_convert() の

array_walk($args, 'plugin_ls2_check_arg', & $params);

を以下のように & を取り去り値渡しに変更します.

array_walk($args, 'plugin_ls2_check_arg', $params);

4. Deprecated: Assigning the return value of new by reference is deprecated in 淡々とやっつける
new 演算の戻り値は = で参照渡しになるのに,さらに =& で参照渡しで受け取ろうとすると Deprecated と怒られます.この箇所は error_reporting をデフォルトの状態にすることで抑制出来る箇所ではあるのですが…
直しておくにこしたことはありません.

lib/func.php の function get_autolink_pattern の場合

$config = &new Config('AutoLink');

を以下のように & を取り去ります.

$config = new Config('AutoLink');

こんなのが以下の個所で存在していますので,全ての & を取り去ります.

lib/func.php function get_autolink_pattern(& $pages)
  $config = &new Config('AutoLink');

lib/config.php function read()
  $obj = & new ConfigTable('');
  $obj = & new ConfigTable($line);
  $obj = & new ConfigTable_Direct('', $obj);
  $obj = & new ConfigTable_Sequential('', $obj);

lib/config.php function & get_object($title)
  $this->objs[$title] = & new ConfigTable('*' . trim($title) . "\n");

lib/convert_html.php function convert_html($lines)
  $body = & new Body(++$contents_id);

lib/convert_html.php function & toPara($class = '')
  $obj = & new Paragraph('', $class);

lib/convert_html.php function Table
  $row[] = & new TableCell($cell, $is_template);

lib/convert_html.php function Body($id)
  $this->contents      = & new Element();

lib/link.php function & links_get_objects($page, $refresh = FALSE)
  $obj = & new InlineConverter(NULL, array('note'));

plugin/attach.inc.php function plugin_attach_convert()
  $obj  = & new AttachPages($page);

plugin/attach.inc.php function attach_filelist()
  $obj = & new AttachPages($page, 0);

plugin/attach.inc.php function attach_upload($file, $page, $pass = NULL)
  $obj = & new AttachFile($page, $file['name']);

plugin/attach.inc.php function attach_info($err = '')
  $obj = & new AttachFile($refer, $file, $age);

plugin/attach.inc.php function attach_delete()
  $obj = & new AttachFile($refer, $file, $age);

plugin/attach.inc.php function attach_freeze($freeze)
  $obj = & new AttachFile($refer, $file, $age);

plugin/attach.inc.php function attach_rename()
  $obj = & new AttachFile($refer, $file, $age);

plugin/attach.inc.php function attach_open()
  $obj = & new AttachFile($refer, $file, $age);

plugin/attach.inc.php function attach_list()
  $obj = & new AttachPages($refer);

plugin/attach.inc.php function add($file, $age)
  $this->files[$file][$age] = & new AttachFile($this->page, $file, $age);

plugin/attach.inc.php function AttachPages($page = '', $age = NULL)
  $this->pages[$_page] = & new AttachFiles($_page);

と,今日はここまで…

SPONSORED LINK
  ☆ ブログランキング参加しました (*≧∀≦)ノシ
にほんブログ村 IT技術ブログ FreeBSDへ 

関連記事

GEOM RAID1 を管理する

Seichan です.こんばんわ. 前回の「GEOM RAID0 と GEOM RAID1 の組み

記事を読む

no image

mpd で PPTP

papu が Poptop で PPTP を頑張ってやっているらしいので,こっちは mpd で P

記事を読む

PHPki で簡単証明書運用 (2) 【初期設定と Root CA 証明書作成】

Seichan です.こんばんわ. さて,先日の「PHPki で簡単証明書運用 (1) 【修正版】

記事を読む

FreeNAS 0.69 (Kwisatz Haderach) の日本語環境アップデート

おひさしぶりです.Seichan です.FreeNAS 0.69 が出てからちょっと立ちました.とて

記事を読む

no image

FreeBSD 5.3-RELEASE がリリース

突然,5.3-RC1 に戻った,前回のリリース騒ぎ.今回はきちんとリリースされ,アナウンスされた.

記事を読む

no image

PostgreSQL サーバをかえた

PostgreSQL を 8.0 系から,8.1 系に変更. そのついでに,物理的なサーバをかえた.

記事を読む

no image

FreeBSD には関係ないが

CIFS は1アクション毎のやり取りが多すぎる.この為,リモートからのファイル送受信はとてつもなく時

記事を読む

no image

MovableTypeを入れてみた

FreeBSD なサーバにこの blog ツールである,MovableType を入れてみた. DB

記事を読む

no image

djbdns から bind へ移行

DMZ 構成にして,ネットワーク構成を色々変更して,何か良くわからないんですが, djbdns でう

記事を読む

no image

Apache

うちの環境では,NFS & amd を利用して,ホームをお互いのマシンがマウントしている. この中で

記事を読む

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

Google Adsense

PHPki で簡単証明書運用 (5) 【管理ユーザのメンテナンスとCRLの取得】

Seichanです.こんばんわ. いつものとおり,だいぶ日が経ってし

PHPki で簡単証明書運用 (4) 【作成した証明書を管理する】

Seichanです.こんばんわ. 先日の「PHPki で簡単証明書運

PHPki で簡単証明書運用 (3) 【署名されたサーバ証明書を作る】

Seichan です.こんばんわ. さて,先日の「PHPki で簡単

PHPki で簡単証明書運用 (2) 【初期設定と Root CA 証明書作成】

Seichan です.こんばんわ. さて,先日の「PHPki で簡単

PHPki で簡単証明書運用 (1) 【PHPki の修正と導入 (修正版)】

Seichan です.こんばんわ. 先日「PHPki で簡単証明書運

→もっと見る

PAGE TOP ↑