/lib/vendor/symfony/lib/plugins/sfPropelPlugin/lib/vendor/phing/system/io/InputStream.php
https://github.com/makerlabs/Symfohub · PHP · 178 lines · 76 code · 21 blank · 81 comment · 10 complexity · 412e4f53a279b5b94ade4e6f6e50be53 MD5 · raw file
- <?php
- /*
- * $Id: FileReader.php 123 2006-09-14 20:19:08Z mrook $
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * This software consists of voluntary contributions made by many individuals
- * and is licensed under the LGPL. For more information please see
- * <http://phing.info>.
- */
- /**
- * Wrapper class for PHP stream that supports read operations.
- *
- * @package phing.system.io
- */
- class InputStream {
-
- /**
- * @var resource The attached PHP stream.
- */
- protected $stream;
-
- /**
- * @var int Position of stream cursor.
- */
- protected $currentPosition = 0;
-
- /**
- * @var int Marked position of stream cursor.
- */
- protected $mark = 0;
-
- /**
- * Construct a new InputStream.
- * @param resource $stream Configured PHP stream for writing.
- */
- public function __construct($stream) {
- if (!is_resource($stream)) {
- throw new IOException("Passed argument is not a valid stream.");
- }
- $this->stream = $stream;
- }
- /**
- * Skip over $n bytes.
- * @param int $n
- */
- public function skip($n) {
- $start = $this->currentPosition;
- $ret = @fseek($this->stream, $n, SEEK_CUR);
- if ( $ret === -1 )
- return -1;
- $this->currentPosition = ftell($this->stream);
- if ( $start > $this->currentPosition )
- $skipped = $start - $this->currentPosition;
- else
- $skipped = $this->currentPosition - $start;
- return $skipped;
- }
-
- /**
- * Read data from stream until $len chars or EOF.
- * @param int $len Num chars to read. If not specified this stream will read until EOF.
- * @return string chars read or -1 if eof.
- */
- public function read($len = null) {
-
- if ($this->eof()) {
- return -1;
- }
-
- if ($len === null) { // we want to keep reading until we get an eof
- $out = "";
- while(!$this->eof()) {
- $out .= fread($this->stream, 8192);
- $this->currentPosition = ftell($this->stream);
- }
- } else {
- $out = fread($this->stream, $len); // adding 1 seems to ensure that next call to read() will return EOF (-1)
- $this->currentPosition = ftell($this->stream);
- }
- return $out;
- }
-
- /**
- * Marks the current position in this input stream.
- * @throws IOException - if the underlying stream doesn't support this method.
- */
- public function mark() {
- if (!$this->markSupported()) {
- throw new IOException(get_class($this) . " does not support mark() and reset() methods.");
- }
- $this->mark = $this->currentPosition;
- }
-
- /**
- * Whether the input stream supports mark and reset methods.
- * @return boolean
- */
- public function markSupported() {
- return false;
- }
-
- /**
- * Repositions this stream to the position at the time the mark method was last called on this input stream.
- * @throws IOException - if the underlying stream doesn't support this method.
- */
- function reset() {
- if (!$this->markSupported()) {
- throw new IOException(get_class($this) . " does not support mark() and reset() methods.");
- }
- // goes back to last mark, by default this would be 0 (i.e. rewind file).
- fseek($this->stream, SEEK_SET, $this->mark);
- $this->mark = 0;
- }
-
- /**
- * Closes stream.
- * @throws IOException if stream cannot be closed (note that calling close() on an already-closed stream will not raise an exception)
- */
- public function close() {
- if ($this->stream === null) {
- return;
- }
- if (false === @fclose($this->stream)) {
- // FAILED.
- $msg = "Cannot fclose " . $this->file->__toString() . " $php_errormsg";
- throw new IOException($msg);
- }
- $this->stream = null;
- }
-
- /**
- * Whether eof has been reached with stream.
- * @return boolean
- */
- public function eof() {
- return feof($this->stream);
- }
-
- /**
- * Reads a entire until EOF and places contents in passed-in variable. Stream is closed after read.
- *
- * @param string &$rBuffer String variable where read contents will be put.
- * @return TRUE on success.
- * @author Charlie Killian, charlie@tizac.com
- * @throws IOException - if there is an error reading from stream.
- * @deprecated - Instead, use the read() method or a BufferedReader.
- */
- public function readInto(&$rBuffer) {
- $rBuffer = $this->read();
- $this->close();
- }
-
- /**
- * Returns string representation of attached stream.
- * @return string
- */
- public function __toString() {
- return (string) $this->stream;
- }
- }