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);