| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180 | <?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());    }}
 |