[ Index ] |
PHP Cross Reference of moodle-2.8 |
[Summary view] [Print] [Text view]
1 <?php 2 /** 3 * PHPExcel 4 * 5 * Copyright (c) 2006 - 2014 PHPExcel 6 * 7 * This library is free software; you can redistribute it and/or 8 * modify it under the terms of the GNU Lesser General Public 9 * License as published by the Free Software Foundation; either 10 * version 2.1 of the License, or (at your option) any later version. 11 * 12 * This library is distributed in the hope that it will be useful, 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 15 * Lesser General Public License for more details. 16 * 17 * You should have received a copy of the GNU Lesser General Public 18 * License along with this library; if not, write to the Free Software 19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 20 * 21 * @category PHPExcel 22 * @package PHPExcel_Shared 23 * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) 24 * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL 25 * @version ##VERSION##, ##DATE## 26 */ 27 28 29 /** 30 * PHPExcel_Shared_ZipStreamWrapper 31 * 32 * @category PHPExcel 33 * @package PHPExcel_Shared 34 * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) 35 */ 36 class PHPExcel_Shared_ZipStreamWrapper { 37 /** 38 * Internal ZipAcrhive 39 * 40 * @var ZipAcrhive 41 */ 42 private $_archive; 43 44 /** 45 * Filename in ZipAcrhive 46 * 47 * @var string 48 */ 49 private $_fileNameInArchive = ''; 50 51 /** 52 * Position in file 53 * 54 * @var int 55 */ 56 private $_position = 0; 57 58 /** 59 * Data 60 * 61 * @var mixed 62 */ 63 private $_data = ''; 64 65 /** 66 * Register wrapper 67 */ 68 public static function register() { 69 @stream_wrapper_unregister("zip"); 70 @stream_wrapper_register("zip", __CLASS__); 71 } 72 73 /** 74 * Implements support for fopen(). 75 * 76 * @param string $path resource name including scheme, e.g. 77 * @param string $mode only "r" is supported 78 * @param int $options mask of STREAM_REPORT_ERRORS and STREAM_USE_PATH 79 * @param string &$openedPath absolute path of the opened stream (out parameter) 80 * @return bool true on success 81 */ 82 public function stream_open($path, $mode, $options, &$opened_path) { 83 // Check for mode 84 if ($mode{0} != 'r') { 85 throw new PHPExcel_Reader_Exception('Mode ' . $mode . ' is not supported. Only read mode is supported.'); 86 } 87 88 $pos = strrpos($path, '#'); 89 $url['host'] = substr($path, 6, $pos - 6); // 6: strlen('zip://') 90 $url['fragment'] = substr($path, $pos + 1); 91 92 // Open archive 93 $this->_archive = new ZipArchive(); 94 $this->_archive->open($url['host']); 95 96 $this->_fileNameInArchive = $url['fragment']; 97 $this->_position = 0; 98 $this->_data = $this->_archive->getFromName( $this->_fileNameInArchive ); 99 100 return true; 101 } 102 103 /** 104 * Implements support for fstat(). 105 * 106 * @return boolean 107 */ 108 public function statName() { 109 return $this->_fileNameInArchive; 110 } 111 112 /** 113 * Implements support for fstat(). 114 * 115 * @return boolean 116 */ 117 public function url_stat() { 118 return $this->statName( $this->_fileNameInArchive ); 119 } 120 121 /** 122 * Implements support for fstat(). 123 * 124 * @return boolean 125 */ 126 public function stream_stat() { 127 return $this->_archive->statName( $this->_fileNameInArchive ); 128 } 129 130 /** 131 * Implements support for fread(), fgets() etc. 132 * 133 * @param int $count maximum number of bytes to read 134 * @return string 135 */ 136 function stream_read($count) { 137 $ret = substr($this->_data, $this->_position, $count); 138 $this->_position += strlen($ret); 139 return $ret; 140 } 141 142 /** 143 * Returns the position of the file pointer, i.e. its offset into the file 144 * stream. Implements support for ftell(). 145 * 146 * @return int 147 */ 148 public function stream_tell() { 149 return $this->_position; 150 } 151 152 /** 153 * EOF stream 154 * 155 * @return bool 156 */ 157 public function stream_eof() { 158 return $this->_position >= strlen($this->_data); 159 } 160 161 /** 162 * Seek stream 163 * 164 * @param int $offset byte offset 165 * @param int $whence SEEK_SET, SEEK_CUR or SEEK_END 166 * @return bool 167 */ 168 public function stream_seek($offset, $whence) { 169 switch ($whence) { 170 case SEEK_SET: 171 if ($offset < strlen($this->_data) && $offset >= 0) { 172 $this->_position = $offset; 173 return true; 174 } else { 175 return false; 176 } 177 break; 178 179 case SEEK_CUR: 180 if ($offset >= 0) { 181 $this->_position += $offset; 182 return true; 183 } else { 184 return false; 185 } 186 break; 187 188 case SEEK_END: 189 if (strlen($this->_data) + $offset >= 0) { 190 $this->_position = strlen($this->_data) + $offset; 191 return true; 192 } else { 193 return false; 194 } 195 break; 196 197 default: 198 return false; 199 } 200 } 201 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Fri Nov 28 20:29:05 2014 | Cross-referenced by PHPXref 0.7.1 |