Go to the documentation of this file.00001 <?php
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00015 final class FileReader extends Reader
00016 {
00017 private $fd = null;
00018
00022 public static function create($fileName)
00023 {
00024 return new self($fileName);
00025 }
00026
00030 public function __construct($fileName)
00031 {
00032 if (!is_readable($fileName))
00033 throw new WrongStateException("Can not read {$fileName}");
00034
00035 try {
00036 $this->fd = fopen($fileName, 'rt');
00037 } catch (BaseException $e) {
00038 throw new IOException($e->getMessage());
00039 }
00040 }
00041
00042 public function __destruct()
00043 {
00044 try {
00045 $this->close();
00046 } catch (BaseException $e) {
00047
00048 }
00049 }
00050
00051 public function isEof()
00052 {
00053 return feof($this->fd);
00054 }
00055
00056 public function markSupported()
00057 {
00058 return true;
00059 }
00060
00064 public function mark()
00065 {
00066 $this->mark = ftell($this->fd);
00067
00068 return $this;
00069 }
00070
00074 public function reset()
00075 {
00076 if (fseek($this->fd, $this->mark) < 0)
00077 throw new IOException(
00078 'mark has been invalidated'
00079 );
00080
00081 return $this;
00082 }
00083
00087 public function close()
00088 {
00089 if (!fclose($this->fd))
00090 throw new IOException('failed to close the file');
00091
00092 return $this;
00093 }
00094
00095 public function read($length)
00096 {
00097 $result = null;
00098
00099 for ($i = 0; $i < $length; $i++) {
00100 if (
00101 ($char = fgetc($this->fd)) === false
00102 )
00103 break;
00104
00105 $result .= $char;
00106 }
00107
00108 return $result;
00109 }
00110 }
00111 ?>