Rev 2388 | Blame | Compare with Previous | Last modification | View Log | RSS feed
<?php/*** PHPExcel** Copyright (c) 2006 - 2013 PHPExcel** This library is free software; you can redistribute it and/or* modify it under the terms of the GNU Lesser General Public* License as published by the Free Software Foundation; either* version 2.1 of the License, or (at your option) any later version.** This library is distributed in the hope that it will be useful,* but WITHOUT ANY WARRANTY; without even the implied warranty of* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU* Lesser General Public License for more details.** You should have received a copy of the GNU Lesser General Public* License along with this library; if not, write to the Free Software* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA** @category PHPExcel* @package PHPExcel_Shared* @copyright Copyright (c) 2006 - 2013 PHPExcel (http://www.codeplex.com/PHPExcel)* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL* @version ##VERSION##, ##DATE##*//*** PHPExcel_Shared_ZipStreamWrapper** @category PHPExcel* @package PHPExcel_Shared* @copyright Copyright (c) 2006 - 2013 PHPExcel (http://www.codeplex.com/PHPExcel)*/class PHPExcel_Shared_ZipStreamWrapper {/*** Internal ZipAcrhive** @var ZipAcrhive*/private $_archive;/*** Filename in ZipAcrhive** @var string*/private $_fileNameInArchive = '';/*** Position in file** @var int*/private $_position = 0;/*** Data** @var mixed*/private $_data = '';/*** Register wrapper*/public static function register() {@stream_wrapper_unregister("zip");@stream_wrapper_register("zip", __CLASS__);}/*** Implements support for fopen().** @param string $path resource name including scheme, e.g.* @param string $mode only "r" is supported* @param int $options mask of STREAM_REPORT_ERRORS and STREAM_USE_PATH* @param string &$openedPath absolute path of the opened stream (out parameter)* @return bool true on success*/public function stream_open($path, $mode, $options, &$opened_path) {// Check for modeif ($mode{0} != 'r') {throw new PHPExcel_Reader_Exception('Mode ' . $mode . ' is not supported. Only read mode is supported.');}$pos = strrpos($path, '#');$url['host'] = substr($path, 6, $pos - 6); // 6: strlen('zip://')$url['fragment'] = substr($path, $pos + 1);// Open archive$this->_archive = new ZipArchive();$this->_archive->open($url['host']);$this->_fileNameInArchive = $url['fragment'];$this->_position = 0;$this->_data = $this->_archive->getFromName( $this->_fileNameInArchive );return true;}/*** Implements support for fstat().** @return boolean*/public function statName() {return $this->_fileNameInArchive;}/*** Implements support for fstat().** @return boolean*/public function url_stat() {return $this->statName( $this->_fileNameInArchive );}/*** Implements support for fstat().** @return boolean*/public function stream_stat() {return $this->_archive->statName( $this->_fileNameInArchive );}/*** Implements support for fread(), fgets() etc.** @param int $count maximum number of bytes to read* @return string*/function stream_read($count) {$ret = substr($this->_data, $this->_position, $count);$this->_position += strlen($ret);return $ret;}/*** Returns the position of the file pointer, i.e. its offset into the file* stream. Implements support for ftell().** @return int*/public function stream_tell() {return $this->_position;}/*** EOF stream** @return bool*/public function stream_eof() {return $this->_position >= strlen($this->_data);}/*** Seek stream** @param int $offset byte offset* @param int $whence SEEK_SET, SEEK_CUR or SEEK_END* @return bool*/public function stream_seek($offset, $whence) {switch ($whence) {case SEEK_SET:if ($offset < strlen($this->_data) && $offset >= 0) {$this->_position = $offset;return true;} else {return false;}break;case SEEK_CUR:if ($offset >= 0) {$this->_position += $offset;return true;} else {return false;}break;case SEEK_END:if (strlen($this->_data) + $offset >= 0) {$this->_position = strlen($this->_data) + $offset;return true;} else {return false;}break;default:return false;}}}