<?php 
/** 
 * This file is part of the PHP Generics package. 
 * 
 * @package Generics 
 */ 
namespace Generics\Streams\Interceptor; 
 
/** 
 * This class provides an caching stream interceptor 
 * 
 * @author Maik Greubel <[email protected]> 
 */ 
class CachedStreamInterceptor extends AbstractStreamInterceptor 
{ 
 
    /** 
     * 
     * @var string 
     */ 
    private static $cache = ""; 
 
    /** 
     * Create a new instance of CachedStreamInterceptor 
     */ 
    public function __construct() 
    { 
        stream_filter_register($this->getFilterName(), CachedStreamInterceptor::class); 
    } 
 
    /** 
     * 
     * {@inheritdoc} 
     * @see \Generics\Streams\Interceptor\StreamInterceptor::filter() 
     */ 
    public function filter($in, $out, int &$consumed, bool $closing): int 
    { 
        if ($closing) { 
            return PSFS_FEED_ME; 
        } 
         
        while ($bucket = stream_bucket_make_writeable($in)) { 
            self::$cache .= $bucket->data; 
            $consumed += $bucket->datalen; 
            stream_bucket_append($out, $bucket); 
        } 
        return PSFS_PASS_ON; 
    } 
 
    /** 
     * Retrieve the cache buffer 
     * 
     * @return string 
     */ 
    public function getCache(): string 
    { 
        return self::$cache; 
    } 
 
    /** 
     * 
     * {@inheritdoc} 
     * @see \Generics\Streams\Interceptor\StreamInterceptor::getFilterName() 
     */ 
    public function getFilterName(): string 
    { 
        return strtolower(CachedStreamInterceptor::class); 
    } 
 
    /** 
     * 
     * {@inheritdoc} 
     * @see \Generics\Streams\Interceptor\StreamInterceptor::reset() 
     */ 
    public function reset() 
    { 
        self::$cache = ""; 
    } 
} 
 
 |