| [ Index ] |
PHP Cross Reference of Wordpress 2.7.1 |
[Summary view] [Print] [Text view]
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 ?>
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
| Generated: Mon Mar 23 16:23:02 2009 | Cross-referenced by PHPXref 0.7 |