]> scripts.mit.edu Git - autoinstalls/wordpress.git/blob - wp-includes/streams.php
Wordpress 2.8-scripts
[autoinstalls/wordpress.git] / wp-includes / streams.php
1 <?php
2 /**
3  * PHP-Gettext External Library: StreamReader classes
4  *
5  * @package External
6  * @subpackage PHP-gettext
7  *
8  * @internal
9    Copyright (c) 2003, 2005 Danilo Segan <danilo@kvota.net>.
10
11    This file is part of PHP-gettext.
12
13    PHP-gettext is free software; you can redistribute it and/or modify
14    it under the terms of the GNU General Public License as published by
15    the Free Software Foundation; either version 2 of the License, or
16    (at your option) any later version.
17
18    PHP-gettext is distributed in the hope that it will be useful,
19    but WITHOUT ANY WARRANTY; without even the implied warranty of
20    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
21    GNU General Public License for more details.
22
23    You should have received a copy of the GNU General Public License
24    along with PHP-gettext; if not, write to the Free Software
25    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
26
27  */
28
29
30 // Simple class to wrap file streams, string streams, etc.
31 // seek is essential, and it should be byte stream
32 class StreamReader {
33   // should return a string [FIXME: perhaps return array of bytes?]
34   function read($bytes) {
35     return false;
36   }
37
38   // should return new position
39   function seekto($position) {
40     return false;
41   }
42
43   // returns current position
44   function currentpos() {
45     return false;
46   }
47
48   // returns length of entire stream (limit for seekto()s)
49   function length() {
50     return false;
51   }
52 }
53
54 class StringReader {
55   var $_pos;
56   var $_str;
57
58   function StringReader($str='') {
59     $this->_str = $str;
60     $this->_pos = 0;
61     // If string functions are overloaded, we need to use the mb versions
62     $this->is_overloaded = ((ini_get("mbstring.func_overload") & 2) != 0) && function_exists('mb_substr');
63   }
64
65   function _substr($string, $start, $length) {
66         if ($this->is_overloaded) {
67                 return mb_substr($string,$start,$length,'ascii');
68         } else {
69                 return substr($string,$start,$length);
70         }
71   }
72
73   function _strlen($string) {
74         if ($this->is_overloaded) {
75                 return mb_strlen($string,'ascii');
76         } else {
77                 return strlen($string);
78         }
79   }
80
81   function read($bytes) {
82           $data = $this->_substr($this->_str, $this->_pos, $bytes);
83     $this->_pos += $bytes;
84     if ($this->_strlen($this->_str)<$this->_pos)
85       $this->_pos = $this->_strlen($this->_str);
86
87     return $data;
88   }
89
90   function seekto($pos) {
91     $this->_pos = $pos;
92     if ($this->_strlen($this->_str)<$this->_pos)
93       $this->_pos = $this->_strlen($this->_str);
94     return $this->_pos;
95   }
96
97   function currentpos() {
98     return $this->_pos;
99   }
100
101   function length() {
102     return $this->_strlen($this->_str);
103   }
104 }
105
106
107 class FileReader {
108   var $_pos;
109   var $_fd;
110   var $_length;
111
112   function FileReader($filename) {
113     if (file_exists($filename)) {
114
115       $this->_length=filesize($filename);
116       $this->_pos = 0;
117       $this->_fd = fopen($filename,'rb');
118       if (!$this->_fd) {
119         $this->error = 3; // Cannot read file, probably permissions
120         return false;
121       }
122     } else {
123       $this->error = 2; // File doesn't exist
124       return false;
125     }
126   }
127
128   function read($bytes) {
129     if ($bytes) {
130       fseek($this->_fd, $this->_pos);
131
132       // PHP 5.1.1 does not read more than 8192 bytes in one fread()
133       // the discussions at PHP Bugs suggest it's the intended behaviour
134       while ($bytes > 0) {
135         $chunk  = fread($this->_fd, $bytes);
136         $data  .= $chunk;
137         $bytes -= strlen($chunk);
138       }
139       $this->_pos = ftell($this->_fd);
140
141       return $data;
142     } else return '';
143   }
144
145   function seekto($pos) {
146     fseek($this->_fd, $pos);
147     $this->_pos = ftell($this->_fd);
148     return $this->_pos;
149   }
150
151   function currentpos() {
152     return $this->_pos;
153   }
154
155   function length() {
156     return $this->_length;
157   }
158
159   function close() {
160     fclose($this->_fd);
161   }
162
163 }
164
165 // Preloads entire file in memory first, then creates a StringReader
166 // over it (it assumes knowledge of StringReader internals)
167 class CachedFileReader extends StringReader {
168   function CachedFileReader($filename) {
169     parent::StringReader();
170
171     if (file_exists($filename)) {
172
173       $length=filesize($filename);
174       $fd = fopen($filename,'rb');
175
176       if (!$fd) {
177         $this->error = 3; // Cannot read file, probably permissions
178         return false;
179       }
180       $this->_str = fread($fd, $length);
181           fclose($fd);
182
183     } else {
184       $this->error = 2; // File doesn't exist
185       return false;
186     }
187   }
188 }
189
190
191 ?>