[ Index ]

PHP Cross Reference of Wordpress 2.7.1

title

Body

[close]

/wp-includes/ -> streams.php (source)

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


Generated: Mon Mar 23 16:23:02 2009 Cross-referenced by PHPXref 0.7