| 
									
										
										
										
											2010-08-26 19:14:53 +00:00
										 |  |  | <?php | 
					
						
							|  |  |  | /** | 
					
						
							|  |  |  |  * PHPExcel | 
					
						
							|  |  |  |  * | 
					
						
							| 
									
										
										
										
											2015-05-02 22:50:37 +00:00
										 |  |  |  * Copyright (c) 2006 - 2015 PHPExcel | 
					
						
							| 
									
										
										
										
											2010-08-26 19:14:53 +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 | 
					
						
							| 
									
										
										
										
											2015-05-02 22:50:37 +00:00
										 |  |  |  * @copyright  Copyright (c) 2006 - 2015 PHPExcel (http://www.codeplex.com/PHPExcel) | 
					
						
							| 
									
										
										
										
											2015-05-12 09:22:06 +00:00
										 |  |  |  * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt    LGPL | 
					
						
							| 
									
										
										
										
											2010-08-26 19:14:53 +00:00
										 |  |  |  * @version    ##VERSION##, ##DATE##
 | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /** | 
					
						
							|  |  |  |  * PHPExcel_Shared_File | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * @category   PHPExcel | 
					
						
							|  |  |  |  * @package    PHPExcel_Shared | 
					
						
							| 
									
										
										
										
											2015-05-02 22:50:37 +00:00
										 |  |  |  * @copyright  Copyright (c) 2006 - 2015 PHPExcel (http://www.codeplex.com/PHPExcel) | 
					
						
							| 
									
										
										
										
											2010-08-26 19:14:53 +00:00
										 |  |  |  */ | 
					
						
							|  |  |  | class PHPExcel_Shared_File | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2015-05-12 09:22:06 +00:00
										 |  |  |     /* | 
					
						
							|  |  |  |      * Use Temp or File Upload Temp for temporary files | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @protected | 
					
						
							|  |  |  |      * @var    boolean | 
					
						
							|  |  |  |      */ | 
					
						
							| 
									
										
										
										
											2015-05-15 10:55:10 +00:00
										 |  |  |     protected static $_useUploadTempDirectory    = false; | 
					
						
							| 
									
										
										
										
											2015-05-12 09:22:06 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * Set the flag indicating whether the File Upload Temp directory should be used for temporary files | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @param     boolean    $useUploadTempDir        Use File Upload Temporary directory (true or false) | 
					
						
							|  |  |  |      */ | 
					
						
							| 
									
										
										
										
											2015-05-15 10:55:10 +00:00
										 |  |  |     public static function setUseUploadTempDirectory($useUploadTempDir = false) | 
					
						
							|  |  |  |     { | 
					
						
							| 
									
										
										
										
											2015-05-12 09:22:06 +00:00
										 |  |  |         self::$_useUploadTempDirectory = (boolean) $useUploadTempDir; | 
					
						
							| 
									
										
										
										
											2015-05-15 10:55:10 +00:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2015-05-12 09:22:06 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * Get the flag indicating whether the File Upload Temp directory should be used for temporary files | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @return     boolean    Use File Upload Temporary directory (true or false) | 
					
						
							|  |  |  |      */ | 
					
						
							| 
									
										
										
										
											2015-05-15 10:55:10 +00:00
										 |  |  |     public static function getUseUploadTempDirectory() | 
					
						
							|  |  |  |     { | 
					
						
							| 
									
										
										
										
											2015-05-12 09:22:06 +00:00
										 |  |  |         return self::$_useUploadTempDirectory; | 
					
						
							| 
									
										
										
										
											2015-05-15 10:55:10 +00:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2015-05-12 09:22:06 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |       * Verify if a file exists | 
					
						
							|  |  |  |       * | 
					
						
							|  |  |  |       * @param     string    $pFilename    Filename | 
					
						
							|  |  |  |       * @return bool | 
					
						
							|  |  |  |       */ | 
					
						
							| 
									
										
										
										
											2015-05-15 10:55:10 +00:00
										 |  |  |     public static function file_exists($pFilename) | 
					
						
							|  |  |  |     { | 
					
						
							| 
									
										
										
										
											2015-05-12 09:22:06 +00:00
										 |  |  |         // Sick construction, but it seems that
 | 
					
						
							|  |  |  |         // file_exists returns strange values when
 | 
					
						
							|  |  |  |         // doing the original file_exists on ZIP archives...
 | 
					
						
							| 
									
										
										
										
											2015-05-15 10:55:10 +00:00
										 |  |  |         if (strtolower(substr($pFilename, 0, 3)) == 'zip') { | 
					
						
							| 
									
										
										
										
											2015-05-12 09:22:06 +00:00
										 |  |  |             // Open ZIP file and verify if the file exists
 | 
					
						
							|  |  |  |             $zipFile         = substr($pFilename, 6, strpos($pFilename, '#') - 6); | 
					
						
							|  |  |  |             $archiveFile     = substr($pFilename, strpos($pFilename, '#') + 1); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             $zip = new ZipArchive(); | 
					
						
							|  |  |  |             if ($zip->open($zipFile) === true) { | 
					
						
							|  |  |  |                 $returnValue = ($zip->getFromName($archiveFile) !== false); | 
					
						
							|  |  |  |                 $zip->close(); | 
					
						
							|  |  |  |                 return $returnValue; | 
					
						
							|  |  |  |             } else { | 
					
						
							|  |  |  |                 return false; | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         } else { | 
					
						
							|  |  |  |             // Regular file_exists
 | 
					
						
							|  |  |  |             return file_exists($pFilename); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * Returns canonicalized absolute pathname, also for ZIP archives | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @param string $pFilename | 
					
						
							|  |  |  |      * @return string | 
					
						
							|  |  |  |      */ | 
					
						
							| 
									
										
										
										
											2015-05-15 10:55:10 +00:00
										 |  |  |     public static function realpath($pFilename) | 
					
						
							|  |  |  |     { | 
					
						
							| 
									
										
										
										
											2015-05-12 09:22:06 +00:00
										 |  |  |         // Returnvalue
 | 
					
						
							|  |  |  |         $returnValue = ''; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         // Try using realpath()
 | 
					
						
							|  |  |  |         if (file_exists($pFilename)) { | 
					
						
							|  |  |  |             $returnValue = realpath($pFilename); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         // Found something?
 | 
					
						
							| 
									
										
										
										
											2015-05-15 10:55:10 +00:00
										 |  |  |         if ($returnValue == '' || ($returnValue === null)) { | 
					
						
							|  |  |  |             $pathArray = explode('/', $pFilename); | 
					
						
							| 
									
										
										
										
											2015-05-13 10:27:01 +00:00
										 |  |  |             while (in_array('..', $pathArray) && $pathArray[0] != '..') { | 
					
						
							| 
									
										
										
										
											2015-05-12 09:22:06 +00:00
										 |  |  |                 for ($i = 0; $i < count($pathArray); ++$i) { | 
					
						
							|  |  |  |                     if ($pathArray[$i] == '..' && $i > 0) { | 
					
						
							|  |  |  |                         unset($pathArray[$i]); | 
					
						
							|  |  |  |                         unset($pathArray[$i - 1]); | 
					
						
							|  |  |  |                         break; | 
					
						
							|  |  |  |                     } | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |             $returnValue = implode('/', $pathArray); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         // Return
 | 
					
						
							|  |  |  |         return $returnValue; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * Get the systems temporary directory. | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @return string | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     public static function sys_get_temp_dir() | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         if (self::$_useUploadTempDirectory) { | 
					
						
							|  |  |  |             //  use upload-directory when defined to allow running on environments having very restricted
 | 
					
						
							|  |  |  |             //      open_basedir configs
 | 
					
						
							| 
									
										
										
										
											2015-05-15 10:55:10 +00:00
										 |  |  |             if (ini_get('upload_tmp_dir') !== false) { | 
					
						
							| 
									
										
										
										
											2015-05-12 09:22:06 +00:00
										 |  |  |                 if ($temp = ini_get('upload_tmp_dir')) { | 
					
						
							| 
									
										
										
										
											2015-05-15 10:55:10 +00:00
										 |  |  |                     if (file_exists($temp)) { | 
					
						
							| 
									
										
										
										
											2015-05-12 09:22:06 +00:00
										 |  |  |                         return realpath($temp); | 
					
						
							| 
									
										
										
										
											2015-05-15 10:55:10 +00:00
										 |  |  |                     } | 
					
						
							| 
									
										
										
										
											2015-05-12 09:22:06 +00:00
										 |  |  |                 } | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         // sys_get_temp_dir is only available since PHP 5.2.1
 | 
					
						
							|  |  |  |         // http://php.net/manual/en/function.sys-get-temp-dir.php#94119
 | 
					
						
							| 
									
										
										
										
											2015-05-16 21:09:31 +00:00
										 |  |  |         if (!function_exists('sys_get_temp_dir')) { | 
					
						
							|  |  |  |             if ($temp = getenv('TMP')) { | 
					
						
							| 
									
										
										
										
											2015-05-15 10:55:10 +00:00
										 |  |  |                 if ((!empty($temp)) && (file_exists($temp))) { | 
					
						
							|  |  |  |                     return realpath($temp); | 
					
						
							|  |  |  |                 } | 
					
						
							| 
									
										
										
										
											2015-05-12 09:22:06 +00:00
										 |  |  |             } | 
					
						
							| 
									
										
										
										
											2015-05-16 21:09:31 +00:00
										 |  |  |             if ($temp = getenv('TEMP')) { | 
					
						
							| 
									
										
										
										
											2015-05-15 10:55:10 +00:00
										 |  |  |                 if ((!empty($temp)) && (file_exists($temp))) { | 
					
						
							|  |  |  |                     return realpath($temp); | 
					
						
							|  |  |  |                 } | 
					
						
							| 
									
										
										
										
											2015-05-12 09:22:06 +00:00
										 |  |  |             } | 
					
						
							| 
									
										
										
										
											2015-05-16 21:09:31 +00:00
										 |  |  |             if ($temp = getenv('TMPDIR')) { | 
					
						
							| 
									
										
										
										
											2015-05-15 10:55:10 +00:00
										 |  |  |                 if ((!empty($temp)) && (file_exists($temp))) { | 
					
						
							|  |  |  |                     return realpath($temp); | 
					
						
							|  |  |  |                 } | 
					
						
							| 
									
										
										
										
											2015-05-12 09:22:06 +00:00
										 |  |  |             } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             // trick for creating a file in system's temporary dir
 | 
					
						
							|  |  |  |             // without knowing the path of the system's temporary dir
 | 
					
						
							|  |  |  |             $temp = tempnam(__FILE__, ''); | 
					
						
							|  |  |  |             if (file_exists($temp)) { | 
					
						
							|  |  |  |                 unlink($temp); | 
					
						
							|  |  |  |                 return realpath(dirname($temp)); | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             return null; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         // use ordinary built-in PHP function
 | 
					
						
							|  |  |  |         //    There should be no problem with the 5.2.4 Suhosin realpath() bug, because this line should only
 | 
					
						
							|  |  |  |         //        be called if we're running 5.2.1 or earlier
 | 
					
						
							|  |  |  |         return realpath(sys_get_temp_dir()); | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2010-08-26 19:14:53 +00:00
										 |  |  | } |