[ Index ] |
PHP Cross Reference of WordPress |
[Summary view] [Print] [Text view]
1 <?php 2 /** 3 * Classes, which help reading streams of data from files. 4 * Based on the classes from Danilo Segan <danilo@kvota.net> 5 * 6 * @version $Id: streams.php 1157 2015-11-20 04:30:11Z dd32 $ 7 * @package pomo 8 * @subpackage streams 9 */ 10 11 if ( ! class_exists( 'POMO_Reader', false ) ) : 12 class POMO_Reader { 13 14 public $endian = 'little'; 15 public $_post = ''; 16 17 /** 18 * PHP5 constructor. 19 */ 20 public function __construct() { 21 if ( function_exists( 'mb_substr' ) 22 && ( (int) ini_get( 'mbstring.func_overload' ) & 2 ) // phpcs:ignore PHPCompatibility.IniDirectives.RemovedIniDirectives.mbstring_func_overloadDeprecated 23 ) { 24 $this->is_overloaded = true; 25 } else { 26 $this->is_overloaded = false; 27 } 28 29 $this->_pos = 0; 30 } 31 32 /** 33 * PHP4 constructor. 34 * 35 * @deprecated 5.4.0 Use __construct() instead. 36 * 37 * @see POMO_Reader::__construct() 38 */ 39 public function POMO_Reader() { 40 _deprecated_constructor( self::class, '5.4.0', static::class ); 41 self::__construct(); 42 } 43 44 /** 45 * Sets the endianness of the file. 46 * 47 * @param string $endian Set the endianness of the file. Accepts 'big', or 'little'. 48 */ 49 public function setEndian( $endian ) { // phpcs:ignore WordPress.NamingConventions.ValidFunctionName.MethodNameInvalid 50 $this->endian = $endian; 51 } 52 53 /** 54 * Reads a 32bit Integer from the Stream 55 * 56 * @return mixed The integer, corresponding to the next 32 bits from 57 * the stream of false if there are not enough bytes or on error 58 */ 59 public function readint32() { 60 $bytes = $this->read( 4 ); 61 if ( 4 != $this->strlen( $bytes ) ) { 62 return false; 63 } 64 $endian_letter = ( 'big' === $this->endian ) ? 'N' : 'V'; 65 $int = unpack( $endian_letter, $bytes ); 66 return reset( $int ); 67 } 68 69 /** 70 * Reads an array of 32-bit Integers from the Stream 71 * 72 * @param int $count How many elements should be read 73 * @return mixed Array of integers or false if there isn't 74 * enough data or on error 75 */ 76 public function readint32array( $count ) { 77 $bytes = $this->read( 4 * $count ); 78 if ( 4 * $count != $this->strlen( $bytes ) ) { 79 return false; 80 } 81 $endian_letter = ( 'big' === $this->endian ) ? 'N' : 'V'; 82 return unpack( $endian_letter . $count, $bytes ); 83 } 84 85 /** 86 * @param string $string 87 * @param int $start 88 * @param int $length 89 * @return string 90 */ 91 public function substr( $string, $start, $length ) { 92 if ( $this->is_overloaded ) { 93 return mb_substr( $string, $start, $length, 'ascii' ); 94 } else { 95 return substr( $string, $start, $length ); 96 } 97 } 98 99 /** 100 * @param string $string 101 * @return int 102 */ 103 public function strlen( $string ) { 104 if ( $this->is_overloaded ) { 105 return mb_strlen( $string, 'ascii' ); 106 } else { 107 return strlen( $string ); 108 } 109 } 110 111 /** 112 * @param string $string 113 * @param int $chunk_size 114 * @return array 115 */ 116 public function str_split( $string, $chunk_size ) { 117 if ( ! function_exists( 'str_split' ) ) { 118 $length = $this->strlen( $string ); 119 $out = array(); 120 for ( $i = 0; $i < $length; $i += $chunk_size ) { 121 $out[] = $this->substr( $string, $i, $chunk_size ); 122 } 123 return $out; 124 } else { 125 return str_split( $string, $chunk_size ); 126 } 127 } 128 129 /** 130 * @return int 131 */ 132 public function pos() { 133 return $this->_pos; 134 } 135 136 /** 137 * @return true 138 */ 139 public function is_resource() { 140 return true; 141 } 142 143 /** 144 * @return true 145 */ 146 public function close() { 147 return true; 148 } 149 } 150 endif; 151 152 if ( ! class_exists( 'POMO_FileReader', false ) ) : 153 class POMO_FileReader extends POMO_Reader { 154 155 /** 156 * @param string $filename 157 */ 158 public function __construct( $filename ) { 159 parent::__construct(); 160 $this->_f = fopen( $filename, 'rb' ); 161 } 162 163 /** 164 * PHP4 constructor. 165 * 166 * @deprecated 5.4.0 Use __construct() instead. 167 * 168 * @see POMO_FileReader::__construct() 169 */ 170 public function POMO_FileReader( $filename ) { 171 _deprecated_constructor( self::class, '5.4.0', static::class ); 172 self::__construct( $filename ); 173 } 174 175 /** 176 * @param int $bytes 177 * @return string|false Returns read string, otherwise false. 178 */ 179 public function read( $bytes ) { 180 return fread( $this->_f, $bytes ); 181 } 182 183 /** 184 * @param int $pos 185 * @return bool 186 */ 187 public function seekto( $pos ) { 188 if ( -1 == fseek( $this->_f, $pos, SEEK_SET ) ) { 189 return false; 190 } 191 $this->_pos = $pos; 192 return true; 193 } 194 195 /** 196 * @return bool 197 */ 198 public function is_resource() { 199 return is_resource( $this->_f ); 200 } 201 202 /** 203 * @return bool 204 */ 205 public function feof() { 206 return feof( $this->_f ); 207 } 208 209 /** 210 * @return bool 211 */ 212 public function close() { 213 return fclose( $this->_f ); 214 } 215 216 /** 217 * @return string 218 */ 219 public function read_all() { 220 return stream_get_contents( $this->_f ); 221 } 222 } 223 endif; 224 225 if ( ! class_exists( 'POMO_StringReader', false ) ) : 226 /** 227 * Provides file-like methods for manipulating a string instead 228 * of a physical file. 229 */ 230 class POMO_StringReader extends POMO_Reader { 231 232 public $_str = ''; 233 234 /** 235 * PHP5 constructor. 236 */ 237 public function __construct( $str = '' ) { 238 parent::__construct(); 239 $this->_str = $str; 240 $this->_pos = 0; 241 } 242 243 /** 244 * PHP4 constructor. 245 * 246 * @deprecated 5.4.0 Use __construct() instead. 247 * 248 * @see POMO_StringReader::__construct() 249 */ 250 public function POMO_StringReader( $str = '' ) { 251 _deprecated_constructor( self::class, '5.4.0', static::class ); 252 self::__construct( $str ); 253 } 254 255 /** 256 * @param string $bytes 257 * @return string 258 */ 259 public function read( $bytes ) { 260 $data = $this->substr( $this->_str, $this->_pos, $bytes ); 261 $this->_pos += $bytes; 262 if ( $this->strlen( $this->_str ) < $this->_pos ) { 263 $this->_pos = $this->strlen( $this->_str ); 264 } 265 return $data; 266 } 267 268 /** 269 * @param int $pos 270 * @return int 271 */ 272 public function seekto( $pos ) { 273 $this->_pos = $pos; 274 if ( $this->strlen( $this->_str ) < $this->_pos ) { 275 $this->_pos = $this->strlen( $this->_str ); 276 } 277 return $this->_pos; 278 } 279 280 /** 281 * @return int 282 */ 283 public function length() { 284 return $this->strlen( $this->_str ); 285 } 286 287 /** 288 * @return string 289 */ 290 public function read_all() { 291 return $this->substr( $this->_str, $this->_pos, $this->strlen( $this->_str ) ); 292 } 293 294 } 295 endif; 296 297 if ( ! class_exists( 'POMO_CachedFileReader', false ) ) : 298 /** 299 * Reads the contents of the file in the beginning. 300 */ 301 class POMO_CachedFileReader extends POMO_StringReader { 302 /** 303 * PHP5 constructor. 304 */ 305 public function __construct( $filename ) { 306 parent::__construct(); 307 $this->_str = file_get_contents( $filename ); 308 if ( false === $this->_str ) { 309 return false; 310 } 311 $this->_pos = 0; 312 } 313 314 /** 315 * PHP4 constructor. 316 * 317 * @deprecated 5.4.0 Use __construct() instead. 318 * 319 * @see POMO_CachedFileReader::__construct() 320 */ 321 public function POMO_CachedFileReader( $filename ) { 322 _deprecated_constructor( self::class, '5.4.0', static::class ); 323 self::__construct( $filename ); 324 } 325 } 326 endif; 327 328 if ( ! class_exists( 'POMO_CachedIntFileReader', false ) ) : 329 /** 330 * Reads the contents of the file in the beginning. 331 */ 332 class POMO_CachedIntFileReader extends POMO_CachedFileReader { 333 /** 334 * PHP5 constructor. 335 */ 336 public function __construct( $filename ) { 337 parent::__construct( $filename ); 338 } 339 340 /** 341 * PHP4 constructor. 342 * 343 * @deprecated 5.4.0 Use __construct() instead. 344 * 345 * @see POMO_CachedIntFileReader::__construct() 346 */ 347 public function POMO_CachedIntFileReader( $filename ) { 348 _deprecated_constructor( self::class, '5.4.0', static::class ); 349 self::__construct( $filename ); 350 } 351 } 352 endif; 353
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Tue Dec 24 01:00:02 2024 | Cross-referenced by PHPXref 0.7.1 |