decoratedStream = $decoratedStream; $this->offset = (int)$offset; } /** * {@inheritdoc} */ public function __toString() { $this->seek(0); return $this->getContents(); } /** * {@inheritdoc} */ public function close() { $this->decoratedStream->close(); } /** * {@inheritdoc} */ public function detach() { return $this->decoratedStream->detach(); } /** * {@inheritdoc} */ public function getSize() { return $this->decoratedStream->getSize() - $this->offset; } /** * {@inheritdoc} */ public function tell() { return $this->decoratedStream->tell() - $this->offset; } /** * {@inheritdoc} */ public function eof() { return $this->decoratedStream->eof(); } /** * {@inheritdoc} */ public function isSeekable() { return $this->decoratedStream->isSeekable(); } /** * {@inheritdoc} */ public function seek($offset, $whence = SEEK_SET) { if ($whence == SEEK_SET) { return $this->decoratedStream->seek($offset + $this->offset, $whence); } return $this->decoratedStream->seek($offset, $whence); } /** * {@inheritdoc} */ public function rewind() { return $this->seek(0); } /** * {@inheritdoc} */ public function isWritable() { return $this->decoratedStream->isWritable(); } /** * {@inheritdoc} */ public function write($string) { if ($this->tell() < 0) { throw new RuntimeException('Invalid pointer position'); } return $this->decoratedStream->write($string); } /** * {@inheritdoc} */ public function isReadable() { return $this->decoratedStream->isReadable(); } /** * {@inheritdoc} */ public function read($length) { if ($this->tell() < 0) { throw new RuntimeException('Invalid pointer position'); } return $this->decoratedStream->read($length); } /** * {@inheritdoc} */ public function getContents() { if ($this->tell() < 0) { throw new RuntimeException('Invalid pointer position'); } return $this->decoratedStream->getContents(); } /** * {@inheritdoc} */ public function getMetadata($key = null) { return $this->decoratedStream->getMetadata($key); } }