2016年3月9日水曜日

【備忘録】Pukiwiki Plus!をPHP5.6で動作させる方法

ちょっと古いサーバーで動作させていた Wiki(Pukiwiki Plus!)の情報を取り出したいと思って、手持ちのMAMP(PHP 5.6)で確認したのですが動作せず...
どうやら、PHP5.4からの仕様変更によって動作しなくなっていることが判明。

動作させるようにしたので、備忘録メモとして記載しておきます。
※なお PHP7に対応するには、 split --> explodeとpreg_splitに変更、lib/lang.php の$_x = $obj_lng->$lng_func[$i](); を $_x = $obj_lng->{$lng_func[$i]}(); など面倒なことを全部こなしたらいけるかもしれません(筆者は試しませんが)。

参考にした情報




PHP 5.4より標準搭載された「hex2bin」への対策



lib/func.php

/*
function hex2bin($hex_string) {
....
}
*/
をコメントし無効とする(PHP 5.4標準の hex2bin関数をつかう)。

関数への参照渡しが廃止されたことへの対策


extended/plugin/lsdate.inc.php
// array_walk($args, 'plugin_lsdate_check_arg', & $params);
array_walk($args, 'plugin_lsdate_check_arg',  $params);


関数名( & 変数A )→ 関数名( 変数A )


関数名( & 変数A )の場合、関数内で変数Aを変更すると、元の変数Aも値が変更されました。このやり方について現在では、関数の方で参照渡しをするようになっています。

function 関数名(& 変数A){
...
}

のように関数の定義の方で参照渡しをするってことです。
このあたりのくわしいことは、ドキュメントをみてください。

戻り値への参照渡しが廃止されたことへの対策


lib/func.php

function get_autolink_pattern_sub(& $pages, $start, $end, $pos)
{
//  return generate_trie_regex(& $pages, $start, $end, $pos);
 return generate_trie_regex($pages, $start, $end, $pos);
}

これも先ほど同様、 関数への参照渡しができてるので不要ってことですね..
というか普通しない....


以上の対策で動作するようになるでしょう。

以下は、推奨レベルです。

Newに対する参照渡しがWarningになる点の修正

クラスの呼び出しに対する参照渡しが不要ってこと。

lib/func.php

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

lib/func.php
plugin/new.inc.php
plugin/tracker.inc.php

あたりに散らばっているので、探して置換。

探すのが面倒じゃーって人は、 &new と & new を new に置換する下記のコマンドを実行しておけばいいでしょう。

find . -name "*.php" -type f -exec grep -l '&new' "{}" \;| xargs sed -i.bak -e 's/&new/new/g'

find . -name "*.php" -type f -exec grep -l '& new' "{}" \;| xargs sed -i.bak -e 's/& new/new/g'


非推奨になった eregを preg_matchへ修正

まぁ本運用するなら必要ですけど、そうじゃないなら無視してOKかと。eregが廃止されたらやらないといけませんけどね。

もし、$hogegeに、 「hogehoge.php」が含まれているならという条件分岐

if( ereg("hogehoge¥.php", $hogege) ){
...
}

これを preg_matchで書き換えると次のようになります。

if( preg_match ("/hogehoge¥.php/", $hogege) ){
...
}




0 件のコメント: