| 
									
										
										
										
											2010-12-13 23:56:51 +00:00
										 |  |  | <?php | 
					
						
							|  |  |  | /** | 
					
						
							|  |  |  |  * PHPExcel | 
					
						
							|  |  |  |  * | 
					
						
							| 
									
										
										
										
											2015-05-02 22:50:37 +00:00
										 |  |  |  * Copyright (c) 2006 - 2015 PHPExcel | 
					
						
							| 
									
										
										
										
											2010-12-13 23:56:51 +00:00
										 |  |  |  * | 
					
						
							|  |  |  |  * 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_ZipArchive | 
					
						
							| 
									
										
										
										
											2015-05-02 22:50:37 +00:00
										 |  |  |  * @copyright  Copyright (c) 2006 - 2015 PHPExcel (http://www.codeplex.com/PHPExcel) | 
					
						
							| 
									
										
										
										
											2010-12-13 23:56:51 +00:00
										 |  |  |  * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL | 
					
						
							|  |  |  |  * @version    ##VERSION##, ##DATE##
 | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-07-14 09:32:36 +00:00
										 |  |  | if (!defined('PCLZIP_TEMPORARY_DIR')) { | 
					
						
							| 
									
										
										
										
											2014-03-29 00:06:50 +00:00
										 |  |  | 	define('PCLZIP_TEMPORARY_DIR', PHPExcel_Shared_File::sys_get_temp_dir() . DIRECTORY_SEPARATOR); | 
					
						
							| 
									
										
										
										
											2012-07-14 09:32:36 +00:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2010-12-13 23:56:51 +00:00
										 |  |  | require_once PHPEXCEL_ROOT . 'PHPExcel/Shared/PCLZip/pclzip.lib.php'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /** | 
					
						
							|  |  |  |  * PHPExcel_Shared_ZipArchive | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * @category   PHPExcel | 
					
						
							|  |  |  |  * @package    PHPExcel_Shared_ZipArchive | 
					
						
							| 
									
										
										
										
											2015-05-02 22:50:37 +00:00
										 |  |  |  * @copyright  Copyright (c) 2006 - 2015 PHPExcel (http://www.codeplex.com/PHPExcel) | 
					
						
							| 
									
										
										
										
											2010-12-13 23:56:51 +00:00
										 |  |  |  */ | 
					
						
							|  |  |  | class PHPExcel_Shared_ZipArchive | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-03-14 13:52:49 +00:00
										 |  |  | 	/**	constants */ | 
					
						
							|  |  |  | 	const OVERWRITE		= 'OVERWRITE'; | 
					
						
							|  |  |  | 	const CREATE		= 'CREATE'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-12-13 23:56:51 +00:00
										 |  |  | 	/** | 
					
						
							|  |  |  | 	 * Temporary storage directory | 
					
						
							|  |  |  | 	 * | 
					
						
							|  |  |  | 	 * @var string | 
					
						
							|  |  |  | 	 */ | 
					
						
							|  |  |  | 	private $_tempDir; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	/** | 
					
						
							|  |  |  | 	 * Zip Archive Stream Handle | 
					
						
							|  |  |  | 	 * | 
					
						
							|  |  |  | 	 * @var string | 
					
						
							|  |  |  | 	 */ | 
					
						
							|  |  |  | 	private $_zip; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-03-19 00:25:29 +00:00
										 |  |  |     /** | 
					
						
							|  |  |  | 	 * Open a new zip archive | 
					
						
							|  |  |  | 	 * | 
					
						
							|  |  |  | 	 * @param	string	$fileName	Filename for the zip archive | 
					
						
							|  |  |  | 	 * @return	boolean | 
					
						
							|  |  |  |      */ | 
					
						
							| 
									
										
										
										
											2010-12-13 23:56:51 +00:00
										 |  |  | 	public function open($fileName) | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		$this->_tempDir = PHPExcel_Shared_File::sys_get_temp_dir(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		$this->_zip = new PclZip($fileName); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		return true; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-03-19 00:25:29 +00:00
										 |  |  |     /** | 
					
						
							|  |  |  | 	 * Close this zip archive | 
					
						
							|  |  |  | 	 * | 
					
						
							|  |  |  |      */ | 
					
						
							| 
									
										
										
										
											2010-12-13 23:56:51 +00:00
										 |  |  | 	public function close() | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-03-19 00:25:29 +00:00
										 |  |  |     /** | 
					
						
							|  |  |  | 	 * Add a new file to the zip archive from a string of raw data. | 
					
						
							|  |  |  | 	 * | 
					
						
							|  |  |  | 	 * @param	string	$localname		Directory/Name of the file to add to the zip archive | 
					
						
							|  |  |  | 	 * @param	string	$contents		String of data to add to the zip archive | 
					
						
							|  |  |  |      */ | 
					
						
							| 
									
										
										
										
											2010-12-13 23:56:51 +00:00
										 |  |  | 	public function addFromString($localname, $contents) | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		$filenameParts = pathinfo($localname); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		$handle = fopen($this->_tempDir.'/'.$filenameParts["basename"], "wb"); | 
					
						
							|  |  |  | 		fwrite($handle, $contents); | 
					
						
							|  |  |  | 		fclose($handle); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		$res = $this->_zip->add($this->_tempDir.'/'.$filenameParts["basename"], | 
					
						
							|  |  |  | 								PCLZIP_OPT_REMOVE_PATH, $this->_tempDir, | 
					
						
							|  |  |  | 								PCLZIP_OPT_ADD_PATH, $filenameParts["dirname"] | 
					
						
							|  |  |  | 							   ); | 
					
						
							|  |  |  | 		if ($res == 0) { | 
					
						
							| 
									
										
										
										
											2013-01-15 21:42:28 +00:00
										 |  |  | 			throw new PHPExcel_Writer_Exception("Error zipping files : " . $this->_zip->errorInfo(true)); | 
					
						
							| 
									
										
										
										
											2010-12-13 23:56:51 +00:00
										 |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		unlink($this->_tempDir.'/'.$filenameParts["basename"]); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-11-17 13:09:11 +00:00
										 |  |  |     /** | 
					
						
							|  |  |  |      * Find if given fileName exist in archive (Emulate ZipArchive locateName()) | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @param        string        $fileName        Filename for the file in zip archive | 
					
						
							|  |  |  |      * @return        boolean | 
					
						
							|  |  |  |      */ | 
					
						
							| 
									
										
										
										
											2013-11-17 14:15:22 +00:00
										 |  |  |     public function locateName($fileName) | 
					
						
							| 
									
										
										
										
											2013-11-17 13:09:11 +00:00
										 |  |  |     { | 
					
						
							|  |  |  |         $list = $this->_zip->listContent(); | 
					
						
							|  |  |  |         $listCount = count($list); | 
					
						
							|  |  |  |         $list_index = -1; | 
					
						
							| 
									
										
										
										
											2013-11-17 17:33:56 +00:00
										 |  |  |         for ($i = 0; $i < $listCount; ++$i) { | 
					
						
							| 
									
										
										
										
											2013-11-17 13:09:11 +00:00
										 |  |  |             if (strtolower($list[$i]["filename"]) == strtolower($fileName) || | 
					
						
							|  |  |  |                 strtolower($list[$i]["stored_filename"]) == strtolower($fileName)) { | 
					
						
							|  |  |  |                 $list_index = $i; | 
					
						
							|  |  |  |                 break; | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         return ($list_index > -1); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * Extract file from archive by given fileName (Emulate ZipArchive getFromName()) | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @param        string        $fileName        Filename for the file in zip archive | 
					
						
							|  |  |  |      * @return        string  $contents        File string contents | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     public function getFromName($fileName)  | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         $list = $this->_zip->listContent(); | 
					
						
							|  |  |  |         $listCount = count($list); | 
					
						
							|  |  |  |         $list_index = -1; | 
					
						
							| 
									
										
										
										
											2013-11-17 17:33:56 +00:00
										 |  |  |         for ($i = 0; $i < $listCount; ++$i) { | 
					
						
							| 
									
										
										
										
											2013-11-17 13:09:11 +00:00
										 |  |  |             if (strtolower($list[$i]["filename"]) == strtolower($fileName) || | 
					
						
							|  |  |  |                 strtolower($list[$i]["stored_filename"]) == strtolower($fileName)) { | 
					
						
							|  |  |  |                 $list_index = $i; | 
					
						
							|  |  |  |                 break; | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2013-11-17 17:33:56 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-11-17 13:09:11 +00:00
										 |  |  |         $extracted = ""; | 
					
						
							|  |  |  |         if ($list_index != -1) { | 
					
						
							|  |  |  |             $extracted = $this->_zip->extractByIndex($list_index, PCLZIP_OPT_EXTRACT_AS_STRING); | 
					
						
							|  |  |  |         } else { | 
					
						
							|  |  |  |             $filename = substr($fileName, 1); | 
					
						
							|  |  |  |             $list_index = -1; | 
					
						
							| 
									
										
										
										
											2013-11-17 17:33:56 +00:00
										 |  |  |             for ($i = 0; $i < $listCount; ++$i) { | 
					
						
							|  |  |  |                 if (strtolower($list[$i]["filename"]) == strtolower($fileName) ||  | 
					
						
							|  |  |  |                     strtolower($list[$i]["stored_filename"]) == strtolower($fileName)) { | 
					
						
							| 
									
										
										
										
											2013-11-17 13:09:11 +00:00
										 |  |  |                     $list_index = $i; | 
					
						
							|  |  |  |                     break; | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |             $extracted = $this->_zip->extractByIndex($list_index, PCLZIP_OPT_EXTRACT_AS_STRING); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         if ((is_array($extracted)) && ($extracted != 0)) { | 
					
						
							|  |  |  |             $contents = $extracted[0]["content"]; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         return $contents; | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2010-12-13 23:56:51 +00:00
										 |  |  | } |