Nucleus

global $blog を乗っ取る

2007年5月23日

また別のプラグインで同じようなことをするかもしれないから、忘れないようにメモ。

ここの例では、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);

コメント

コメントはありません

コメント送信