* 検索で対象ワードが0 になった場合も、get_existpages() している [#ua5ab1fa] - ページ: [[BugTrack2]] - 投稿者: 名無しさん - 優先順位: 低 - 状態: 着手 - カテゴリー: 本体バグ - 投稿日: 2010-03-07 (日) 01:48:30 - バージョン: ** メッセージ [#d9173f2e] SPAM 対策になるかどうかもあやしいような提案ですが。 do_search() に送られた検索語句が半角スペースばかり((search プラグインが除外するのは空文字だけなので、そうなる可能性もある))の場合、 $keys = get_search_words(preg_split('/\s+/', $word, -1, PREG_SPLIT_NO_EMPTY)); で$key にはarray() がセットされます。~ しかし、そのような場合でも全ページの一覧を得ています。(foreach ($keys as $key) の内側でget_source() しているので、さらに全ページのソースを得るというような無駄な事は、していないようですが) 無駄といえば無駄な処理なので、 if (empty($keys)) { $pages = array(); } else { $pages = get_existpages(); } のようにしてしまうというのはどうでしょう?(if ($non_format) return array_keys($pages); の手前までelse 部分に入れてしまう方が、いいような気も・・・) -------- #comment **同じマッチパターンを使用して検索する場合がある [#ac13b252] - 検索関係という事で、もう1つ。~ 「ぱんだ」と「パンダ」などget_search_words() で加工した後が同一になるキーワードが複数あった場合、(S でパターンをキャッシュしているとはいえ)何度もpreg_match() させるのは無駄じゃないでしょうか?~ 得られた$keys をarray_unique() をしてしまうか、get_search_words() の仕様を変更して$regex のキーをmb_convert_kana で加工した後の語句にして重複を防ぐ、というのはどうでしょう? -- &new{2010-03-07 (日) 02:20:24}; -- ちなみに「ぱんだ ぱんだ」のように全く同じ場合でも、現状ではもう1度パターン生成のプロセスに入ってしまうようです。(すでに登録しているかを、チェックしていない) -- &new{2010-03-07 (日) 02:20:24}; *修正パッチ [#oebb63f6] $keys = get_search_words(preg_split('/\s+/', $word, -1, PREG_SPLIT_NO_EMPTY)); + if ( empty($keys) ) + return str_replace('$1', '', $_msg_notfoundresult); //#comment