не фильтруется поток

romy4

invoke [brain]
не фильтруется поток

Есть задача: создать поток, заменяющий php://stdout (ну или в данном случае создать фильтр потока). Получился вот такой вот код (вроде правильно копировал с мана).
Проблема: отказывается ловить данные потока.

можете скопировать и проверить работает ли у вас фильтр.
PHP:
class BUFFILTER extends php_user_filter
{
const MOD_TRANSPARENT=0;
const MOD_COLLECT=1;
const MOD_COLLECT_EXT=2;
const MOD_BLOCK=10;

static $buffer=array();
static $buckets=array();
protected $cnt_idcode=0;
protected $mode;
function filter($in,$out,&$consumed,$closing)
{
    while ($bucket = stream_bucket_make_writeable($in)) 
    {
        switch($this->mode)
        {
        case BUFFILTER::MOD_COLLECT:        $this->mod_collect($bucket->data);break;
        case BUFFILTER::MOD_COLLECT_EXT:    $this->mod_collect_extended($bucket->data);break;
        case BUFFILTER::MOD_BLOCK:          $this->mod_block($bucket->data);break;
        case BUFFILTER::MOD_TRANSPARENT:default:
                                            $this->mod_transparent($bucket->data);break;
        }
        array_push($this->buckets,$bucket);
//        $bucket->data = strtoupper($bucket->data);
        $consumed += $bucket->datalen;
        stream_bucket_append($out, $bucket);
    }
    return PSFS_PASS_ON;
}

function mod_collect(&$data)
{
    $data=preg_replace("~({\?(.*?)\?})~","<nd-code id=\"".$this->cnt_idcode."\">\$1</nd-code>",$data);
}

function mod_collect_extended(&$data)
{
}

function mod_block(&$data)
{
    $data="";
}

function mod_transparent(&$data)
{
}

function onCreate()
{
    switch($this->filtername)
    {
    case "buf.collect":         $this->mode=BUFFILTER::MOD_COLLECT;break;
    case "buf.collect_extended":$this->mode=BUFFILTER::MOD_COLLECT_EXT;break;
    case "buf.block":           $this->mode=BUFFILTER::MOD_BLOCK;break;
    case "buf.transparent":default:
                                $this->mode=BUFFILTER::MOD_TRANSPARENT;break;
    }
    return TRUE;
}
}

class CORE_EXAMPLE
{
protected $garbage="";
protected $buffer_onoff;
function ob_callback($data,$flags)
{
    $data=preg_replace("~({\?(.*?)\?})~","<nd-code id=\"".$this->cnt_idcode."\">\$2</nd-code>",$data);
    $this->garbage.="core&gt; ".$data;
}

function flush_output()
{
    print_r($this->garbage);
}

function buffering($onoff)
{
    if((bool)$onoff===TRUE)
    {
        ob_start(array($this,"ob_callback"));
    }
    else
    {
        ob_end_clean();
    }   
}

$stdout=fopen("php://stdout","rw");
if(stream_filter_register("buf.*","BUFFILTER")===FALSE)
  die("Could not append filter");
$buf_collect=stream_filter_prepend($stdout,"buf.collect",STREAM_FILTER_WRITE|STREAM_FILTER_READ);
echo "THIS CODE WILL BE BUFFERED>>>";
echo "<html><head><title>MyTitle</title></head>\n";
echo "<body>{?body code?}</body>\n";
stream_filter_remove($buf_collect);
echo "THIS CODE WONT BE BUFFERED>>>";
echo "{?another code?}</html>\n";
 
Сверху