*

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へ 

関連記事

no image

FreeBSD 6.0 入れた

FreeBSD 6.0 を VMWare に入れてみた. 現在使っている 5-STABLE のマシン

記事を読む

VMware Server 上の FreeBSD の時刻がずれる

仕事中の Seichan です.忘れやすいので,メモメモ.隣の席の人から,「いつも見てるのに更新され

記事を読む

FreeBSD で NFS (4) 【NFSクライアントとマウントオプション】

Seichan です.こんばんわ. 前回「FreeBSD で NFS (3)」までは NFS Se

記事を読む

GEOM 再学習

Seichan です.こんばんわ. 最近,GEOM (modular disk I/O reque

記事を読む

no image

Apache

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

記事を読む

no image

PostgreSQL サーバをかえた

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

記事を読む

no image

でーたがとんだ?

え〜と.PostgreSQL の復旧をしたと先に書いたのですが,完全復活じゃぁ無いようで… 1週間分

記事を読む

総帯域 44Gbit?

まいど.Seichan です.1000Base-T って Full-Duplex だから,2Gb/s

記事を読む

no image

SORBS

家のサーバはADSL接続で,Reset.jp というプロバイダを利用して接続しています. FreeB

記事を読む

FreeBSD をクライアントとして利用する (X.org)

Seichan です.FreeBSD をクライアントとして利用する,其ノ二.今回は X.org (X

記事を読む

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 ↑