どうやら、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);
}
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'
探すのが面倒じゃーって人は、 &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 件のコメント:
コメントを投稿