71 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			PHP
		
	
	
			
		
		
	
	
			71 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			PHP
		
	
	
| <?php
 | |
| declare(strict_types=1);
 | |
| 
 | |
| namespace ZipStream;
 | |
| 
 | |
| class DeflateStream extends Stream
 | |
| {
 | |
|     protected $filter;
 | |
| 
 | |
|     /**
 | |
|      * @var Option\File
 | |
|      */
 | |
|     protected $options;
 | |
| 
 | |
|     /**
 | |
|      * Rewind stream
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     public function rewind(): void
 | |
|     {
 | |
|         // deflate filter needs to be removed before rewind
 | |
|         if ($this->filter) {
 | |
|             $this->removeDeflateFilter();
 | |
|             $this->seek(0);
 | |
|             $this->addDeflateFilter($this->options);
 | |
|         } else {
 | |
|             rewind($this->stream);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Remove the deflate filter
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     public function removeDeflateFilter(): void
 | |
|     {
 | |
|         if (!$this->filter) {
 | |
|             return;
 | |
|         }
 | |
|         stream_filter_remove($this->filter);
 | |
|         $this->filter = null;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Add a deflate filter
 | |
|      *
 | |
|      * @param Option\File $options
 | |
|      * @return void
 | |
|      */
 | |
|     public function addDeflateFilter(Option\File $options): void
 | |
|     {
 | |
|         $this->options = $options;
 | |
|         // parameter 4 for stream_filter_append expects array
 | |
|         // so we convert the option object in an array
 | |
|         $optionsArr = [
 | |
|             'comment' => $options->getComment(),
 | |
|             'method' => $options->getMethod(),
 | |
|             'deflateLevel' => $options->getDeflateLevel(),
 | |
|             'time' => $options->getTime()
 | |
|         ];
 | |
|         $this->filter = stream_filter_append(
 | |
|             $this->stream,
 | |
|             'zlib.deflate',
 | |
|             STREAM_FILTER_READ,
 | |
|             $optionsArr
 | |
|         );
 | |
|     }
 | |
| }
 |