TightURL

TightURL Git Source Tree

Root/streams.php

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

Archive Download this file

Branches