<?php
							 | 
						|
								
							 | 
						|
								/**
							 | 
						|
								 * PHPExcel_Shared_File
							 | 
						|
								 *
							 | 
						|
								 * Copyright (c) 2006 - 2015 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 - 2015 PHPExcel (http://www.codeplex.com/PHPExcel)
							 | 
						|
								 * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt    LGPL
							 | 
						|
								 * @version    ##VERSION##, ##DATE##
							 | 
						|
								 */
							 | 
						|
								class PHPExcel_Shared_File
							 | 
						|
								{
							 | 
						|
								    /*
							 | 
						|
								     * Use Temp or File Upload Temp for temporary files
							 | 
						|
								     *
							 | 
						|
								     * @protected
							 | 
						|
								     * @var    boolean
							 | 
						|
								     */
							 | 
						|
								    protected static $useUploadTempDirectory = false;
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     * 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)
							 | 
						|
								     */
							 | 
						|
								    public static function setUseUploadTempDirectory($useUploadTempDir = false)
							 | 
						|
								    {
							 | 
						|
								        self::$useUploadTempDirectory = (boolean) $useUploadTempDir;
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     * 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)
							 | 
						|
								     */
							 | 
						|
								    public static function getUseUploadTempDirectory()
							 | 
						|
								    {
							 | 
						|
								        return self::$useUploadTempDirectory;
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								      * Verify if a file exists
							 | 
						|
								      *
							 | 
						|
								      * @param     string    $pFilename    Filename
							 | 
						|
								      * @return bool
							 | 
						|
								      */
							 | 
						|
								    public static function file_exists($pFilename)
							 | 
						|
								    {
							 | 
						|
								        // Sick construction, but it seems that
							 | 
						|
								        // file_exists returns strange values when
							 | 
						|
								        // doing the original file_exists on ZIP archives...
							 | 
						|
								        if (strtolower(substr($pFilename, 0, 3)) == 'zip') {
							 | 
						|
								            // 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
							 | 
						|
								     */
							 | 
						|
								    public static function realpath($pFilename)
							 | 
						|
								    {
							 | 
						|
								        // Returnvalue
							 | 
						|
								        $returnValue = '';
							 | 
						|
								
							 | 
						|
								        // Try using realpath()
							 | 
						|
								        if (file_exists($pFilename)) {
							 | 
						|
								            $returnValue = realpath($pFilename);
							 | 
						|
								        }
							 | 
						|
								
							 | 
						|
								        // Found something?
							 | 
						|
								        if ($returnValue == '' || ($returnValue === null)) {
							 | 
						|
								            $pathArray = explode('/', $pFilename);
							 | 
						|
								            while (in_array('..', $pathArray) && $pathArray[0] != '..') {
							 | 
						|
								                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
							 | 
						|
								            if (ini_get('upload_tmp_dir') !== false) {
							 | 
						|
								                if ($temp = ini_get('upload_tmp_dir')) {
							 | 
						|
								                    if (file_exists($temp)) {
							 | 
						|
								                        return realpath($temp);
							 | 
						|
								                    }
							 | 
						|
								                }
							 | 
						|
								            }
							 | 
						|
								        }
							 | 
						|
								
							 | 
						|
								        // sys_get_temp_dir is only available since PHP 5.2.1
							 | 
						|
								        // http://php.net/manual/en/function.sys-get-temp-dir.php#94119
							 | 
						|
								        if (!function_exists('sys_get_temp_dir')) {
							 | 
						|
								            if ($temp = getenv('TMP')) {
							 | 
						|
								                if ((!empty($temp)) && (file_exists($temp))) {
							 | 
						|
								                    return realpath($temp);
							 | 
						|
								                }
							 | 
						|
								            }
							 | 
						|
								            if ($temp = getenv('TEMP')) {
							 | 
						|
								                if ((!empty($temp)) && (file_exists($temp))) {
							 | 
						|
								                    return realpath($temp);
							 | 
						|
								                }
							 | 
						|
								            }
							 | 
						|
								            if ($temp = getenv('TMPDIR')) {
							 | 
						|
								                if ((!empty($temp)) && (file_exists($temp))) {
							 | 
						|
								                    return realpath($temp);
							 | 
						|
								                }
							 | 
						|
								            }
							 | 
						|
								
							 | 
						|
								            // 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());
							 | 
						|
								    }
							 | 
						|
								}
							 |