|  | Posted by Tjerk Meesters on 02/06/05 11:02 
Hi all,
 This question is based on the given example at
 http://php.net/manual/en/function.stream-filter-register.php
 
 Does anyone have an example of how to implement stream filters that
 produce their output until all input has been read? For instance, a
 stream version of md5() which -on every invocation - takes a 4K buffer
 from input and keeps the current state in a private variable, until EOF.
 
 The filter class would look like this:
 
 class md5_filter extends php_user_filter {
 // keep state info here
 private $buf='';
 
 function filter($in, $out, &$consumed, $closing)
 {
 while ($bucket = stream_bucket_make_writeable($in)) {
 $this->buf .= $bucket->data; // build state data (in a more
 sensible way than this!)
 $consumed += $bucket->datalen;
 }
 // no more buckets from bucket input brigage
 if ($closing) {
 // all input has been read at this point, so make new bucket??
 $bucket = stream_bucket_new(??,md5($this->buf));
 // and append it to the output bucket brigade
 stream_bucket_append($out,$bucket);
 return PSFS_PASS_ON;
 }
 return PSFS_FEED_ME;
 }
 }
 
 EOF is signalled by the $closing parameter in the filter() method. After
 that, one would need to create a bucket to use on stream_bucket_append().
 
 Any ideas?
 
 
 Kind regards,
 Jack
  Navigation: [Reply to this message] |