From c4dd7a1a684490673e25aaf4fabec5df138854c4 Mon Sep 17 00:00:00 2001 From: Lorry Tar Creator Date: Thu, 14 Mar 2013 05:42:27 +0000 Subject: Imported from /home/lorry/working-area/delta_php2/php-5.4.13.tar.bz2. --- ext/spl/internal/splfileobject.inc | 377 +++++++++++++++++++++++++++++++++++++ 1 file changed, 377 insertions(+) create mode 100644 ext/spl/internal/splfileobject.inc (limited to 'ext/spl/internal/splfileobject.inc') diff --git a/ext/spl/internal/splfileobject.inc b/ext/spl/internal/splfileobject.inc new file mode 100644 index 0000000..46b941f --- /dev/null +++ b/ext/spl/internal/splfileobject.inc @@ -0,0 +1,377 @@ +fp = fopen($file_name, $open_mode, $use_include_path, $context); + if (!$this->fp) + { + throw new RuntimeException("Cannot open file $file_name"); + } + $this->fname = $file_name; + } + + /** + * @return whether the end of the stream is reached + */ + function eof() + { + return eof($this->fp); + } + + /** increase current line number + * @return next line from stream + */ + function fgets() + { + $this->freeLine(); + $this->lnum++; + $buf = fgets($this->fp, $this->max_len); + + return $buf; + } + + /** + * @param delimiter character used as field separator + * @param enclosure end of + * @return array containing read data + */ + function fgetcsv($delimiter = NULL, $enclosure = NULL) + { + $this->freeLine(); + $this->lnum++; + switch(fun_num_args()) + { + case 0: + $delimiter = $this->delimiter; + case 1: + $enclosure = $this->enclosure; + default: + case 2: + break; + } + return fgetcsv($this->fp, $this->max_len, $delimiter, $enclosure); + } + + /** + * Set the delimiter and enclosure character used in fgetcsv + * + * @param delimiter new delimiter, defaults to ',' + * @param enclosure new enclosure, defaults to '"' + */ + function setCsvControl($delimiter = ';', $enclosure = '"') + { + $this->delimiter = $delimiter; + $this->enclosure = $enclosure; + } + + /** + * @return array(delimiter, enclosure) as used in fgetcsv + */ + function getCsvControl($delimiter = ',', $enclosure = '"') + { + return array($this->delimiter, $this->enclosure); + } + + /** + * @param operation lock operation (LOCK_SH, LOCK_EX, LOCK_UN, LOCK_NB) + * @retval $wouldblock whether the operation would block + */ + function flock($operation, &$wouldblock) + { + return flock($this->fp, $operation, $wouldblock); + } + + /** + * Flush current data + * @return success or failure + */ + function fflush() + { + return fflush($this->fp); + } + + /** + * @return current file position + */ + function ftell() + { + return ftell($this->fp); + } + + /** + * @param pos new file position + * @param whence seek method (SEEK_SET, SEEK_CUR, SEEK_END) + * @return Upon success, returns 0; otherwise, returns -1. Note that + * seeking past EOF is not considered an error. + */ + function fseek($pos, $whence = SEEK_SET) + { + return fseek($this->fp, $pos, $whence); + } + + /** + * @return next char from file + * @note a new line character does not increase $this->lnum + */ + function fgetc() + { + $this->freeLine(); + $c = fgetc($this->fp); + if ($c == '\n') { + $this->lnum++; + } + } + + /** Read and return remaining part of stream + * @return size of remaining part passed through + */ + function fpassthru() + { + return fpassthru($this->fp); + } + + /** Get a line from the file and strip HTML tags + * @param $allowable_tags tags to keep in the string + */ + function fgetss($allowable_tags = NULL) + { + return fgetss($this->fp, $allowable_tags); + } + + /** Scan the next line + * @param $format string specifying format to parse + */ + function fscanf($format /* , ... */) + { + $this->freeLine(); + $this->lnum++; + return fscanf($this->fp, $format /* , ... */); + } + + /** + * @param $str to write + * @param $length maximum line length to write + */ + function fwrite($str, $length = NULL) + { + return fwrite($this->fp, $length); + } + + /** + * @return array of file stat information + */ + function fstat() + { + return fstat($this->fp); + } + + /** + * @param $size new size to truncate file to + */ + function ftruncate($size) + { + return ftruncate($this->fp, $size); + } + + /** + * @param $flags new flag set + */ + function setFlags($flags) + { + $this->flags = $flags; + } + + /** + * @return current set of flags + */ + function getFlags() + { + return $this->flags; + } + + /** + * @param $max_len set the maximum line length read + */ + function setMaxLineLen($max_len) + { + $this->max_len = $max_len; + } + + /** + * @return current setting for max line + */ + function getMaxLineLen() + { + return $this->max_len; + } + + /** + * @return false + */ + function hasChildren() + { + return false; + } + + /** + * @return false + */ + function getChildren() + { + return NULL; + } + + /** + * Invalidate current line buffer and set line number to 0. + */ + function rewind() + { + $this->freeLine(); + $this->lnum = 0; + } + + /** + * @return whether more data can be read + */ + function valid() + { + return !$this->eof(); + } + + /** + * @note Fill current line buffer if not done yet. + * @return line buffer + */ + function current() + { + if (is_null($this->line)) + { + $this->line = getCurrentLine(); + } + return $this->line; + } + + /** + * @return line number + * @note fgetc() will increase the line number when reaing a new line char. + * This has the effect key() called on a read a new line will already + * return the increased line number. + * @note Line counting works as long as you only read the file and do not + * use fseek(). + */ + function key() + { + return $this->lnum; + } + + /** Invalidate current line buffer. + */ + function next() + { + $this->freeLine(); + } + + /** + * @return next line read from file and increase the line counter + */ + private function readLine() + { + if ($this->eof()) + { + $this->freeLine(); + throw new RuntimeException("Cannot read from file " . $this->fname); + } + if ($this->line) { + $this->lnum++; + } + $this->freeLine(); + $this->line = fgets($this->fp, $this->max_len); + return $this->line; + } + + /** + * Free the current line buffer and increment the line counter + */ + private function freeLine() + { + if ($this->line) { + $this->line = NULL; + } + } + + /* + * @note If you DO overload this function key() and current() will increment + * $this->lnum automatically. If not then function reaLine() will do + * that for you. + */ + function getCurrentLine() + { + $this->freeLine(); + if ($this->eof()) + { + throw new RuntimeException("Cannot read from file " . $this->fname); + } + $this->readLine(); + } + + /** + * @return current line + */ + function __toString() + { + return current(); + } + + /** + * @param $line_pos Seek to this line + */ + function seek($line_pos) + { + $this->rewind(); + while($this->lnum < $line_pos && !$this->eof()) + { + $this->getCurrentLine(); + } + } +} + +?> -- cgit v1.2.1