]> PukiWiki 1.4.7 on PHP 5.4でls2とpcommentの引数が反映されない件 | FullAstern!

Notes

メモ書き

PukiWiki 1.4.7 on PHP 5.4でls2とpcommentの引数が反映されない件

タイトル通り。 #ls2(,reverse)としてもソートが反転されないと言った感じです。 随分長いこと悩まされていましたが解決したので書き残しておきます。

修正箇所

ls2.inc.php
--- ls2.inc.php.orig 2006-10-22 05:41:11 +0900&lf;+++ ls2.inc.php      2014-06-01 15:40:41 +0900&lf;@@ -66,7 +66,9 @@&lf; }&lf; if ($prefix == '') $prefix = strip_bracket($vars['page']) . '/';&lf; &lf;-array_walk($args, 'plugin_ls2_check_arg', & $params);&lf;+if (! empty($args))&lf;+foreach ($args as $arg)&lf;+ls2_check_arg($arg, $params);&lf; &lf; $title = (! empty($params['_args'])) ? join(',', $params['_args']) :   // Manual&lf; str_replace('$1', htmlspecialchars($prefix), $_ls2_msg_title); // Auto&lf;@@ -196,7 +198,7 @@&lf; }&lf; &lf; // オプションを解析する&lf;-function plugin_ls2_check_arg($value, $key, & $params)&lf;+function ls2_check_arg($value, & $params)&lf; {&lf; if ($value == '') {&lf; $params['_done'] = TRUE;&lf;
pcomment.inc.php
--- pcomment.inc.php.orig2006-10-22 05:41:11 +0900&lf;+++ pcomment.inc.php2014-06-01 15:32:00 +0900&lf;@@ -80,7 +80,9 @@&lf; &lf; // BugTrack2/106: Only variables can be passed by reference from PHP 5.0.5&lf; $args = func_get_args(); // with array_walk()&lf;-array_walk($args, 'plugin_pcomment_check_arg', & $params);&lf;+if (! empty($args))&lf;+foreach ($args as $arg)&lf;+pcomment_check_arg($arg, $params);&lf; &lf; $vars_page = isset($vars['page']) ? $vars['page'] : '';&lf; $page  = (isset($params['_args'][0]) && $params['_args'][0] != '') ? $params['_args'][0] :&lf;@@ -303,7 +305,7 @@&lf; }&lf; &lf; // Check arguments&lf;-function plugin_pcomment_check_arg($val, $key, & $params)&lf;+function pcomment_check_arg($val, & $params)&lf; {&lf; if ($val != '') {&lf; $l_val = strtolower($val);&lf;

原因考察

ls2とpcommentは、どちらも引数をarray_walk()によって解析しています。 project-pさんの記事によると、 PHP 5.3.14からこいつの仕様が変わった (バグった?) らしく、 $argsから$paramsへの受け渡しが上手くいかなくなっていたようです。

内部レベルの改版でも動かなくなるプログラムが続出するのは PHPの宿命なのでしょうか……

© FullAstern!