* This file is part of the ManageWP Worker plugin.
* (c) ManageWP LLC <contact@managewp.com>
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
class MWP_Stream_Stream implements MWP_Stream_Interface
public function __construct($stream)
if (!is_resource($stream)) {
throw new InvalidArgumentException('Stream must be a resource');
$meta = stream_get_meta_data($this->stream);
$this->seekable = $meta['seekable'];
* Returns true if the stream is at the end of the stream.
return !$this->stream || feof($this->stream);
* Read data from the stream
* @param int $length Read up to $length bytes from the object and return
* them. Fewer than $length bytes may be returned if
* underlying stream call returns fewer bytes.
* @return string Returns the data read from the stream.
public function read($length)
return fread($this->stream, $length);
public static function factory($resource)
$type = gettype($resource);
$stream = fopen('php://temp', 'r+');
fwrite($stream, $resource);
return new self($stream);
if ($type == 'resource') {
return new self($resource);
if ($resource instanceof MWP_Stream_Interface) {
throw new InvalidArgumentException('Invalid resource type: '.$type);
public function isSeekable()
public function seek($offset, $whence = SEEK_SET)
? fseek($this->stream, $offset, $whence) === 0
if ($this->stream !== null) {
return $this->stream !== null ? ftell($this->stream) : false;
public function __toString()
$buffer .= $this->read(1048576);