BugTrack/2246
の編集
Top
/
BugTrack
/
2246
[
トップ
] [
編集
|
差分
|
履歴
|
添付
|
リロード
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
* plugin_<プラグイン名>_init が複数回呼ばれている [#b763ad8f] - ページ: [[BugTrack2]] - 投稿者: [[sonots]] - 優先順位: 低 - 状態: 完了 - カテゴリー: 本体バグ - 投稿日: 2007-06-15 (金) 15:50:00 - バージョン: 1.4.5-1.4.7 ** メッセージ [#q8c8afb8] plugin_<プラグイン名>_init 関数群は pukiwiki 一度の実行(セッション)につき、それぞれ一度だけ実行されるのが仕様だと思うのですが、現在は各プラグインが呼ばれるごとにそれぞれ毎回実行されています。 調べた所 [[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
タイムスタンプを変更しない
* plugin_<プラグイン名>_init が複数回呼ばれている [#b763ad8f] - ページ: [[BugTrack2]] - 投稿者: [[sonots]] - 優先順位: 低 - 状態: 完了 - カテゴリー: 本体バグ - 投稿日: 2007-06-15 (金) 15:50:00 - バージョン: 1.4.5-1.4.7 ** メッセージ [#q8c8afb8] plugin_<プラグイン名>_init 関数群は pukiwiki 一度の実行(セッション)につき、それぞれ一度だけ実行されるのが仕様だと思うのですが、現在は各プラグインが呼ばれるごとにそれぞれ毎回実行されています。 調べた所 [[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
テキスト整形のルールを表示する