home *** CD-ROM | disk | FTP | other *** search
/ Cricao de Sites - 650 Layouts Prontos / WebMasters.iso / Blogs / wordpress2.6.exe / wordpress2.6 / wp-includes / streams.php < prev    next >
Encoding:
PHP Script  |  2008-07-23  |  4.3 KB  |  192 lines

  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. ?>
  192.