Annotation of embedaddon/php/ext/spl/internal/splfileobject.inc, revision 1.1

1.1     ! misho       1: <?php
        !             2: 
        !             3: /** @file splfileobject.inc
        !             4:  * @ingroup SPL
        !             5:  * @brief class FileObject
        !             6:  * @author  Marcus Boerger
        !             7:  * @date    2003 - 2009
        !             8:  *
        !             9:  * SPL - Standard PHP Library
        !            10:  */
        !            11: 
        !            12: /** @ingroup SPL
        !            13:  * @brief   Object representation for any stream
        !            14:  * @author  Marcus Boerger
        !            15:  * @version 1.1
        !            16:  * @since PHP 5.1
        !            17:  */
        !            18: class SplFileObject extends SplFileInfo implements RecursiveIterator, SeekableIterator
        !            19: {
        !            20:        /** Flag: wheter to suppress new lines */
        !            21:        const DROP_NEW_LINE   = 0x00000001;
        !            22: 
        !            23:        private $fp;
        !            24:        private $fname;
        !            25:        private $line     = NULL;
        !            26:        private $lnum     = 0;
        !            27:        private $max_len  = 0;
        !            28:        private $flags    = 0;
        !            29:        private $delimiter= ',';
        !            30:        private $enclosure= '"';
        !            31:        
        !            32:        /**
        !            33:         * Constructs a new file object
        !            34:         * 
        !            35:         * @param $file_name         The name of the stream to open
        !            36:         * @param $open_mode         The file open mode
        !            37:         * @param $use_include_path  Whether to search in include paths
        !            38:         * @param $context           A stream context
        !            39:         * @throw RuntimeException   If file cannot be opened (e.g. insufficient 
        !            40:         *                           access rights).
        !            41:         */
        !            42:        function __construct($file_name, $open_mode = 'r', $use_include_path = false, $context = NULL)
        !            43:        {
        !            44:                $this->fp = fopen($file_name, $open_mode, $use_include_path, $context);
        !            45:                if (!$this->fp)
        !            46:                {
        !            47:                        throw new RuntimeException("Cannot open file $file_name");
        !            48:                }
        !            49:                $this->fname = $file_name;
        !            50:        }
        !            51:        
        !            52:        /**
        !            53:         * @return whether the end of the stream is reached
        !            54:         */
        !            55:        function eof()
        !            56:        {
        !            57:                return eof($this->fp);
        !            58:        }
        !            59: 
        !            60:        /** increase current line number
        !            61:         * @return next line from stream
        !            62:         */
        !            63:        function fgets()
        !            64:        {
        !            65:                $this->freeLine();
        !            66:                $this->lnum++;
        !            67:                $buf = fgets($this->fp, $this->max_len);
        !            68:                
        !            69:                return $buf;
        !            70:        }
        !            71: 
        !            72:        /**
        !            73:         * @param delimiter  character used as field separator
        !            74:         * @param enclosure  end of 
        !            75:         * @return array containing read data
        !            76:         */
        !            77:        function fgetcsv($delimiter = NULL, $enclosure = NULL)
        !            78:        {
        !            79:                $this->freeLine();
        !            80:                $this->lnum++;
        !            81:                switch(fun_num_args())
        !            82:                {
        !            83:                        case 0:
        !            84:                                $delimiter = $this->delimiter;
        !            85:                        case 1:
        !            86:                                $enclosure = $this->enclosure;
        !            87:                        default:
        !            88:                        case 2:
        !            89:                                break;
        !            90:                }
        !            91:                return fgetcsv($this->fp, $this->max_len, $delimiter, $enclosure); 
        !            92:        }
        !            93: 
        !            94:        /**
        !            95:         * Set the delimiter and enclosure character used in fgetcsv
        !            96:         *
        !            97:         * @param delimiter new delimiter, defaults to ','
        !            98:         * @param enclosure new enclosure, defaults to '"'
        !            99:         */
        !           100:        function setCsvControl($delimiter = ';', $enclosure = '"')
        !           101:        {
        !           102:                $this->delimiter = $delimiter;
        !           103:                $this->enclosure = $enclosure;
        !           104:        }
        !           105: 
        !           106:        /**
        !           107:         * @return array(delimiter, enclosure) as used in fgetcsv
        !           108:         */
        !           109:        function getCsvControl($delimiter = ',', $enclosure = '"')
        !           110:        {
        !           111:                return array($this->delimiter, $this->enclosure);
        !           112:        }
        !           113: 
        !           114:        /**
        !           115:         * @param operation lock operation (LOCK_SH, LOCK_EX, LOCK_UN, LOCK_NB)
        !           116:         * @retval $wouldblock  whether the operation would block
        !           117:         */
        !           118:        function flock($operation, &$wouldblock)
        !           119:        {
        !           120:                return flock($this->fp, $operation, $wouldblock);
        !           121:        }
        !           122: 
        !           123:        /**
        !           124:         * Flush current data
        !           125:         * @return success or failure
        !           126:         */
        !           127:        function fflush()
        !           128:        {
        !           129:                return fflush($this->fp);
        !           130:        }
        !           131: 
        !           132:        /**
        !           133:         * @return current file position
        !           134:         */
        !           135:        function ftell()
        !           136:        {
        !           137:                return ftell($this->fp);
        !           138:        }
        !           139: 
        !           140:        /**
        !           141:         * @param pos new file position
        !           142:         * @param whence seek method (SEEK_SET, SEEK_CUR, SEEK_END)
        !           143:         * @return Upon success, returns 0; otherwise, returns -1. Note that 
        !           144:         *         seeking past EOF is not considered an error.
        !           145:         */
        !           146:        function fseek($pos, $whence = SEEK_SET)
        !           147:        {
        !           148:                return fseek($this->fp, $pos, $whence);
        !           149:        }
        !           150: 
        !           151:        /**
        !           152:         * @return next char from file
        !           153:         * @note a new line character does not increase $this->lnum
        !           154:         */
        !           155:        function fgetc()
        !           156:        {
        !           157:                $this->freeLine();
        !           158:                $c = fgetc($this->fp);
        !           159:                if ($c == '\n') {
        !           160:                        $this->lnum++;
        !           161:                }
        !           162:        }
        !           163: 
        !           164:        /** Read and return remaining part of stream
        !           165:         * @return size of remaining part passed through
        !           166:         */
        !           167:        function fpassthru()
        !           168:        {
        !           169:                return fpassthru($this->fp);
        !           170:        }
        !           171: 
        !           172:        /** Get a line from the file and strip HTML tags
        !           173:         * @param $allowable_tags tags to keep in the string
        !           174:         */
        !           175:        function fgetss($allowable_tags = NULL)
        !           176:        {
        !           177:                return fgetss($this->fp, $allowable_tags);
        !           178:        }
        !           179: 
        !           180:        /** Scan the next line
        !           181:         * @param $format string specifying format to parse
        !           182:         */     
        !           183:        function fscanf($format /* , ... */)
        !           184:        {
        !           185:                $this->freeLine();
        !           186:                $this->lnum++;
        !           187:                return fscanf($this->fp, $format /* , ... */);
        !           188:        }
        !           189: 
        !           190:        /**
        !           191:         * @param $str to write
        !           192:         * @param $length maximum line length to write
        !           193:         */
        !           194:        function fwrite($str, $length = NULL)
        !           195:        {
        !           196:                return fwrite($this->fp, $length);
        !           197:        }
        !           198: 
        !           199:        /**
        !           200:         * @return array of file stat information
        !           201:         */
        !           202:        function fstat()
        !           203:        {
        !           204:                return fstat($this->fp);
        !           205:        }
        !           206: 
        !           207:        /**
        !           208:         * @param $size new size to truncate file to
        !           209:         */
        !           210:        function ftruncate($size)
        !           211:        {
        !           212:                return ftruncate($this->fp, $size);
        !           213:        }
        !           214: 
        !           215:        /**
        !           216:         * @param $flags new flag set
        !           217:         */
        !           218:        function setFlags($flags)
        !           219:        {
        !           220:                $this->flags = $flags;
        !           221:        }
        !           222: 
        !           223:        /**
        !           224:         *  @return current set of flags
        !           225:         */
        !           226:        function getFlags()
        !           227:        {
        !           228:                return $this->flags;
        !           229:        }
        !           230: 
        !           231:        /**
        !           232:         * @param $max_len set the maximum line length read
        !           233:         */
        !           234:        function setMaxLineLen($max_len)
        !           235:        {
        !           236:                $this->max_len = $max_len;
        !           237:        }
        !           238: 
        !           239:        /**
        !           240:         * @return current setting for max line
        !           241:         */
        !           242:        function getMaxLineLen()
        !           243:        {
        !           244:                return $this->max_len;
        !           245:        }
        !           246: 
        !           247:        /**
        !           248:         * @return false
        !           249:         */
        !           250:        function hasChildren()
        !           251:        {
        !           252:                return false;
        !           253:        }
        !           254: 
        !           255:        /**
        !           256:         * @return false
        !           257:         */
        !           258:        function getChildren()
        !           259:        {
        !           260:                return NULL;
        !           261:        }
        !           262: 
        !           263:        /**
        !           264:         * Invalidate current line buffer and set line number to 0.
        !           265:         */
        !           266:        function rewind()
        !           267:        {
        !           268:                $this->freeLine();
        !           269:                $this->lnum = 0;
        !           270:        }
        !           271: 
        !           272:        /**
        !           273:         * @return whether more data can be read
        !           274:         */
        !           275:        function valid()
        !           276:        {
        !           277:                return !$this->eof();
        !           278:        }
        !           279:        
        !           280:        /**
        !           281:         * @note Fill current line buffer if not done yet.
        !           282:         * @return line buffer 
        !           283:         */     
        !           284:        function current()
        !           285:        {
        !           286:                if (is_null($this->line))
        !           287:                {
        !           288:                        $this->line = getCurrentLine();
        !           289:                }
        !           290:                return $this->line;
        !           291:        }
        !           292: 
        !           293:        /**
        !           294:         * @return line number 
        !           295:         * @note fgetc() will increase the line number when reaing a new line char.
        !           296:         *       This has the effect key() called on a read a new line will already
        !           297:         *       return the increased line number.
        !           298:         * @note Line counting works as long as you only read the file and do not
        !           299:         *       use fseek().
        !           300:         */     
        !           301:        function key()
        !           302:        {
        !           303:                return $this->lnum;
        !           304:        }
        !           305: 
        !           306:        /** Invalidate current line buffer.
        !           307:         */     
        !           308:        function next()
        !           309:        {
        !           310:                $this->freeLine();
        !           311:        }
        !           312: 
        !           313:        /**
        !           314:         * @return next line read from file and increase the line counter
        !           315:         */
        !           316:        private function readLine()
        !           317:        {
        !           318:                if ($this->eof())
        !           319:                {
        !           320:                        $this->freeLine();
        !           321:                        throw new RuntimeException("Cannot read from file " . $this->fname);
        !           322:                }
        !           323:                if ($this->line) {
        !           324:                        $this->lnum++;
        !           325:                }
        !           326:                $this->freeLine();
        !           327:                $this->line = fgets($this->fp, $this->max_len);
        !           328:                return $this->line;
        !           329:        }
        !           330: 
        !           331:        /**
        !           332:         * Free the current line buffer and increment the line counter
        !           333:         */
        !           334:        private function freeLine()
        !           335:        {
        !           336:                if ($this->line) {
        !           337:                        $this->line = NULL;
        !           338:                }
        !           339:        }
        !           340: 
        !           341:        /*
        !           342:         * @note If you DO overload this function key() and current() will increment
        !           343:         *       $this->lnum automatically. If not then function reaLine() will do
        !           344:         *       that for you.
        !           345:         */ 
        !           346:        function getCurrentLine()
        !           347:        {
        !           348:                $this->freeLine();
        !           349:                if ($this->eof())
        !           350:                {
        !           351:                        throw new RuntimeException("Cannot read from file " . $this->fname);
        !           352:                }
        !           353:                $this->readLine();
        !           354:        }
        !           355: 
        !           356:        /**
        !           357:         * @return current line
        !           358:         */
        !           359:        function __toString()
        !           360:        {
        !           361:                return current();
        !           362:        }
        !           363: 
        !           364:        /**
        !           365:         * @param $line_pos Seek to this line
        !           366:         */     
        !           367:        function seek($line_pos)
        !           368:        {
        !           369:                $this->rewind();
        !           370:                while($this->lnum < $line_pos && !$this->eof())
        !           371:                {
        !           372:                        $this->getCurrentLine();
        !           373:                }
        !           374:        }
        !           375: }
        !           376: 
        !           377: ?>

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>