splfileobject.inc

Go to the documentation of this file.
00001 <?php
00002 
00018 class SplFileObject extends SplFileInfo implements RecursiveIterator, SeekableIterator
00019 {
00021     const DROP_NEW_LINE   = 0x00000001;
00022 
00023     private $fp;
00024     private $fname;
00025     private $line     = NULL;
00026     private $lnum     = 0;
00027     private $max_len  = 0;
00028     private $flags    = 0;
00029     private $delimiter= ',';
00030     private $enclosure= '"';
00031     
00042     function __construct($file_name, $open_mode = 'r', $use_include_path = false, $context = NULL)
00043     {
00044         $this->fp = fopen($file_name, $open_mode, $use_include_path, $context);
00045         if (!$this->fp)
00046         {
00047             throw new RuntimeException("Cannot open file $file_name");
00048         }
00049         $this->fname = $file_name;
00050     }
00051     
00055     function eof()
00056     {
00057         return eof($this->fp);
00058     }
00059 
00063     function fgets()
00064     {
00065         $this->freeLine();
00066         $this->lnum++;
00067         $buf = fgets($this->fp, $this->max_len);
00068         
00069         return $buf;
00070     }
00071 
00077     function fgetcsv($delimiter = NULL, $enclosure = NULL)
00078     {
00079         $this->freeLine();
00080         $this->lnum++;
00081         switch(fun_num_args())
00082         {
00083             case 0:
00084                 $delimiter = $this->delimiter;
00085             case 1:
00086                 $enclosure = $this->enclosure;
00087             default:
00088             case 2:
00089                 break;
00090         }
00091         return fgetcsv($this->fp, $this->max_len, $delimiter, $enclosure); 
00092     }
00093 
00100     function setCsvControl($delimiter = ';', $enclosure = '"')
00101     {
00102         $this->delimiter = $delimiter;
00103         $this->enclosure = $enclosure;
00104     }
00105 
00109     function getCsvControl($delimiter = ',', $enclosure = '"')
00110     {
00111         return array($this->delimiter, $this->enclosure);
00112     }
00113 
00118     function flock($operation, &$wouldblock)
00119     {
00120         return flock($this->fp, $operation, $wouldblock);
00121     }
00122 
00127     function fflush()
00128     {
00129         return fflush($this->fp);
00130     }
00131 
00135     function ftell()
00136     {
00137         return ftell($this->fp);
00138     }
00139 
00146     function fseek($pos, $whence = SEEK_SET)
00147     {
00148         return fseek($this->fp, $pos, $whence);
00149     }
00150 
00155     function fgetc()
00156     {
00157         $this->freeLine();
00158         $c = fgetc($this->fp);
00159         if ($c == '\n') {
00160             $this->lnum++;
00161         }
00162     }
00163 
00167     function fpassthru()
00168     {
00169         return fpassthru($this->fp);
00170     }
00171 
00175     function fgetss($allowable_tags = NULL)
00176     {
00177         return fgetss($this->fp, $allowable_tags);
00178     }
00179 
00183     function fscanf($format /* , ... */)
00184     {
00185         $this->freeLine();
00186         $this->lnum++;
00187         return fscanf($this->fp, $format /* , ... */);
00188     }
00189 
00194     function fwrite($str, $length = NULL)
00195     {
00196         return fwrite($this->fp, $length);
00197     }
00198 
00202     function fstat()
00203     {
00204         return fstat($this->fp);
00205     }
00206 
00210     function ftruncate($size)
00211     {
00212         return ftruncate($this->fp, $size);
00213     }
00214 
00218     function setFlags($flags)
00219     {
00220         $this->flags = $flags;
00221     }
00222 
00226     function getFlags()
00227     {
00228         return $this->flags;
00229     }
00230 
00234     function setMaxLineLen($max_len)
00235     {
00236         $this->max_len = $max_len;
00237     }
00238 
00242     function getMaxLineLen()
00243     {
00244         return $this->max_len;
00245     }
00246 
00250     function hasChildren()
00251     {
00252         return false;
00253     }
00254 
00258     function getChildren()
00259     {
00260         return NULL;
00261     }
00262 
00266     function rewind()
00267     {
00268         $this->freeLine();
00269         $this->lnum = 0;
00270     }
00271 
00275     function valid()
00276     {
00277         return !$this->eof();
00278     }
00279     
00284     function current()
00285     {
00286         if (is_null($this->line))
00287         {
00288             $this->line = getCurrentLine();
00289         }
00290         return $this->line;
00291     }
00292 
00301     function key()
00302     {
00303         return $this->lnum;
00304     }
00305 
00308     function next()
00309     {
00310         $this->freeLine();
00311     }
00312 
00316     private function readLine()
00317     {
00318         if ($this->eof())
00319         {
00320             $this->freeLine();
00321             throw new RuntimeException("Cannot read from file " . $this->fname);
00322         }
00323         if ($this->line) {
00324             $this->lnum++;
00325         }
00326         $this->freeLine();
00327         $this->line = fgets($this->fp, $this->max_len);
00328         return $this->line;
00329     }
00330 
00334     private function freeLine()
00335     {
00336         if ($this->line) {
00337             $this->line = NULL;
00338         }
00339     }
00340 
00341     /*
00342      * @note If you DO overload this function key() and current() will increment
00343      *       $this->lnum automatically. If not then function reaLine() will do
00344      *       that for you.
00345      */ 
00346     function getCurrentLine()
00347     {
00348         $this->freeLine();
00349         if ($this->eof())
00350         {
00351             throw new RuntimeException("Cannot read from file " . $this->fname);
00352         }
00353         $this->readLine();
00354     }
00355 
00359     function __toString()
00360     {
00361         return current();
00362     }
00363 
00367     function seek($line_pos)
00368     {
00369         $this->rewind();
00370         while($this->lnum < $line_pos && !$this->eof())
00371         {
00372             $this->getCurrentLine();
00373         }
00374     }
00375 }
00376 
00377 ?>

Generated on Thu Apr 26 01:04:48 2007 for SPL-StandardPHPLibrary by  doxygen 1.5.2