Stream Filter

In php one can use filters with streams.  Sometimes it can become handy.  Let’s say you open a .csv file as a stream, but this file is tab separated.  Your program can can process coma separated csvs, but not tab separated.  This is a good use case for a stream filter, because it can make replacements on the fly.  Below is the code that shows how to create and use filter that replaces tabs with comas in the stream.

class TabFilter extends PHP_User_Filter
    private $_data;
    /* Called when the filter is initialized */
    function onCreate( )
        $this->_data = '';
        return true;
    /* This is where the actual stream data conversion takes place */
    public function filter($in, $out, &$consumed, $closing)
        /* We read all the stream data and store it in 
           the '$_data' variable 
        while($bucket = stream_bucket_make_writeable($in))
            $this->_data .= $bucket->data;
            $this->bucket = $bucket;
            $consumed = 0;
        /* Now that we have read all the data from the stream we process 
          it and save it again to the bucket.
            $consumed += strlen($this->_data);
            $pattern = "/\t/";
            $str = preg_replace($pattern,
            $this->bucket->data = $str;
            $this->bucket->datalen = strlen($this->_data);
            if(!empty($this->bucket->data)) {
                stream_bucket_append($out, $this->bucket);
            return PSFS_PASS_ON;
        return PSFS_FEED_ME;
stream_filter_register('myFilter', 'URLFilter');
$handle = fopen("", "r");
stream_filter_append($handle, "myFilter");