PHP Classes
elePHPant
Icontem

File: application/modules/extensions/aws/Aws/HashingStream.php

Recommend this page to a friend!
  Classes of Tran Tuan  >  Pretty PHP S3 Files Manager  >  application/modules/extensions/aws/Aws/HashingStream.php  >  Download  
File: application/modules/extensions/aws/Aws/HashingStream.php
Role: Application script
Content type: text/plain
Description: Initial
Class: Pretty PHP S3 Files Manager
Web based interface to manage files in Amazon S3
Author: By
Last change:
Date: 3 years ago
Size: 1,562 bytes
 

 

Contents

Class file image Download
<?php
namespace Aws;

use
GuzzleHttp\Psr7\StreamDecoratorTrait;
use
Psr\Http\Message\StreamInterface;

/**
 * Stream decorator that calculates a rolling hash of the stream as it is read.
 */
class HashingStream implements StreamInterface
{
    use
StreamDecoratorTrait;

   
/** @var HashInterface */
   
private $hash;

   
/** @var callable|null */
   
private $callback;

   
/**
     * @param StreamInterface $stream Stream that is being read.
     * @param HashInterface $hash Hash used to calculate checksum.
     * @param callable $onComplete Optional function invoked when the
     * hash calculation is completed.
     */
   
public function __construct(
       
StreamInterface $stream,
       
HashInterface $hash,
        callable
$onComplete = null
   
) {
       
$this->stream = $stream;
       
$this->hash = $hash;
       
$this->callback = $onComplete;
    }

    public function
read($length)
    {
       
$data = $this->stream->read($length);
       
$this->hash->update($data);
        if (
$this->eof()) {
           
$result = $this->hash->complete();
            if (
$this->callback) {
               
call_user_func($this->callback, $result);
            }
        }

        return
$data;
    }

    public function
seek($offset, $whence = SEEK_SET)
    {
        if (
$offset === 0) {
           
$this->hash->reset();
            return
$this->stream->seek($offset);
        } else {
           
// Seeking arbitrarily is not supported.
           
return false;
        }
    }
}