*

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

業務連絡

Celeron 300A な CPU を PPPoE ルータにした所,それなりにスピード叩き出してて

記事を読む

no image

qmail SMTP-AUTH imapext

imapext ML を見てみたら,Yuuji Hirose さんが,imapext 形式のパスワー

記事を読む

no image

FreeBSD には関係ないが

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

記事を読む

no image

OpenSUSE

会社を休んだ Seichan です.こんばんわ. 今,飯の準備をしながら CentOS 4.4 と戯

記事を読む

no image

LPI Level1 申し込んだ

Seichan です.2週間はペンギンにどっぷり浮気します.だえもんさん怒らないで下さい… とりあえ

記事を読む

no image

fukuoka-u.ac.jp の NTP サーバ

2ch の Linux 板のあるスレッドに,福岡大学の ntp 管理者(?) からの書込みがあった.

記事を読む

/usr/ports/mail/qmail の Makefile を修正

Seichan です.忘れるのでメモFreeBSD の ports にて qmail-ldap をイ

記事を読む

no image

メンテナンス完了

結局,PM11:00 より開始して AM10:00 に終了しました.軽く寝て起きた Seichan

記事を読む

no image

祝(?) 180,000Km & watchdog timeout…

こんばんわ.Seichan です.最近さらにバタバタと過ごしております. まったりする時間が欲しい

記事を読む

no image

djbdns から bind へ移行

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

記事を読む

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 ↑