* plugin_<プラグイン名>_init が複数回呼ばれている [#b763ad8f]

- ページ: [[BugTrack2]]
- 投稿者: [[sonots]]
- 優先順位: 低
- 状態: 完了
- カテゴリー: 本体バグ
- 投稿日: 2007-06-15 (金) 15:50:00
- バージョン: 1.4.5-1.4.7

** メッセージ [#q8c8afb8]
plugin_<プラグイン名>_init 関数群は pukiwiki 一度の実行(セッション)につき、それぞれ一度だけ実行されるのが仕様だと思うのですが、現在は各プラグインが呼ばれるごとにそれぞれ毎回実行されています。

調べた所
http://cvs.sourceforge.jp/cgi-bin/viewcvs.cgi/pukiwiki/pukiwiki/lib/plugin.php?r1=1.1&r2=1.2
[[cvs-raw:lib/plugin.php?r1=1.1&r2=1.2]]
の時点で array_key_exists が isset に変更され、NULL が値になった際の挙動が変わってしまっています。
これは [[BugTrack/779]] クリンナップのまとめ array_key_exists() => isset() のところで NULL 値が格納された場合を見逃して修正してしまったのではないかと思います。

元に戻す修正パッチです。

 --- org.orig/lib/plugin.php     2005-07-03 10:16:23.000000000 -0400
 +++ org.dev/lib/plugin.php      2007-06-15 02:40:09.937500000 -0400
 @@ -72,7 +72,7 @@
  {
         static $checked = array();
 
 -       if (isset($checked[$name])) return $checked[$name];
 +       if (array_key_exists($name, $checked)) return $checked[$name];
 
         $func = 'plugin_' . $name . '_init';
         if (function_exists($func)) {

--------
- コメントありがとうございます。ご指摘の通りかと思います。ここで要求されている仕事をこなすのは、 array_key_exists() を使うのが最もスマートだと思います((is_set() にこだわる路線で static 変数 $positive, $negative を使い分ける案も考えましたが、冗長でした))。同じ事をしない様、コメントでもそれなりに強調しておきました。ついでに、現状は init 関数が何を返してきたとしても、そのデータをそのまま抱え込もうとする作りになっていたので直しました。いかがでしょうか -- [[henoheno]] &new{2007-06-15 (金) 22:49:05};
-- [[cvs:lib/plugin.php]] (1.16)
- ごくろうさまです。良いと思います。完了にしておきました。 -- [[sonots]] &new{2007-06-16 (土) 01:20:28};
- 確認ありがとうございます。しかし、NULLかどうかをチェックする処理にそもそも存在意義が無い事に気づきましたので、結局isset()で良くなりました。大分スマートになったかと思いますがどうでしょうか・・・ -- [[henoheno]] &new{2007-06-17 (日) 23:34:27};
-- [[cvs:lib/plugin.php]] (1.17)
- こちらは最終的に、理解するために必要なステップをさらに縮めた状態にしました。一応完了としておきます。お知らせいただきありがとうございました。 -- [[henoheno]] &new{2007-06-24 (日) 23:12:53};
-- [[cvs:lib/plugin.php]] (1.18)

#comment
//#comment

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Site admin: PukiWiki Development Team

PukiWiki 1.5.3+ © 2001-2020 PukiWiki Development Team. Powered by PHP 5.6.40-0+deb8u12. HTML convert time: 0.027 sec.

OSDN