global $blog を乗っ取る
2007年5月23日
また別のプラグインで同じようなことをするかもしれないから、忘れないようにメモ。
ここの例では、BLOG::getSqlSearch() 関数に、
ここの例では、BLOG::getSqlSearch() 関数に、
array_merge($searchclass->blogs,array(1,2,3));と、一行追加するように、BLOG オブジェクトを入れ替える。
$fhandle=fopen($DIR_LIBS.'BLOG.php','r'); $inside=false; $result=''; while (!feof ($fhandle)) { $buffer = fgets($fhandle, 4096); if (!$inside) { if (!preg_match('/^([\s]*)function([\s]+)getSqlSearch([\s]*)\(/i',$buffer)) continue; $inside=true; } if ($inside) { if ($result && preg_match('/^([\s]*)function([\s]+)([a-zA-Z0-9_]+)\(/',$buffer)) break; if (preg_match('/(\$[^=]+)=([&]?)([\s]*)new([\s]+)SEARCH([\s]*)\(/i',$buffer,$matches)) { $buffer.='array_merge('.$matches[1].'->blogs,array('.implode(',',$blogs).'));'; } $result.=$buffer; } } fclose($fhandle); eval(' class NP_subSilver_BLOG extends BLOG { function NP_subSilver_BLOG($id){ return $this->BLOG($id); } '.$result.' }'); $bid=$blog->getId(); $blog=new NP_subSilver_BLOG($bid);