You are here

PhpInputStream.php in Zircon Profile 8

Same filename and directory in other branches
  1. 8.0 vendor/zendframework/zend-diactoros/src/PhpInputStream.php

Namespace

Zend\Diactoros

File

vendor/zendframework/zend-diactoros/src/PhpInputStream.php
View source
<?php

/**
 * Zend Framework (http://framework.zend.com/)
 *
 * @see       http://github.com/zendframework/zend-diactoros for the canonical source repository
 * @copyright Copyright (c) 2015 Zend Technologies USA Inc. (http://www.zend.com)
 * @license   https://github.com/zendframework/zend-diactoros/blob/master/LICENSE.md New BSD License
 */
namespace Zend\Diactoros;


/**
 * Caching version of php://input
 */
class PhpInputStream extends Stream {

  /**
   * @var string
   */
  private $cache = '';

  /**
   * @var bool
   */
  private $reachedEof = false;

  /**
   * @param  string|resource $stream
   * @param  string $mode
   */
  public function __construct($stream = 'php://input', $mode = 'r') {
    $mode = 'r';
    parent::__construct($stream, $mode);
  }

  /**
   * {@inheritdoc}
   */
  public function __toString() {
    if ($this->reachedEof) {
      return $this->cache;
    }
    $this
      ->getContents();
    return $this->cache;
  }

  /**
   * {@inheritdoc}
   */
  public function isWritable() {
    return false;
  }

  /**
   * {@inheritdoc}
   */
  public function read($length) {
    $content = parent::read($length);
    if ($content && !$this->reachedEof) {
      $this->cache .= $content;
    }
    if ($this
      ->eof()) {
      $this->reachedEof = true;
    }
    return $content;
  }

  /**
   * {@inheritdoc}
   */
  public function getContents($maxLength = -1) {
    if ($this->reachedEof) {
      return $this->cache;
    }
    $contents = stream_get_contents($this->resource, $maxLength);
    $this->cache .= $contents;
    if ($maxLength === -1 || $this
      ->eof()) {
      $this->reachedEof = true;
    }
    return $contents;
  }

}

Classes

Namesort descending Description
PhpInputStream Caching version of php://input