source: sourcecode/application/libraries/PHPExcel/Shared/File.php @ 1

Last change on this file since 1 was 1, checked in by dungnv, 11 years ago
File size: 5.1 KB
Line 
1<?php
2/**
3 * PHPExcel
4 *
5 * Copyright (c) 2006 - 2014 PHPExcel
6 *
7 * This library is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Lesser General Public
9 * License as published by the Free Software Foundation; either
10 * version 2.1 of the License, or (at your option) any later version.
11 *
12 * This library is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15 * Lesser General Public License for more details.
16 *
17 * You should have received a copy of the GNU Lesser General Public
18 * License along with this library; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
20 *
21 * @category   PHPExcel
22 * @package    PHPExcel_Shared
23 * @copyright  Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
24 * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt    LGPL
25 * @version    1.8.0, 2014-03-02
26 */
27
28
29/**
30 * PHPExcel_Shared_File
31 *
32 * @category   PHPExcel
33 * @package    PHPExcel_Shared
34 * @copyright  Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
35 */
36class PHPExcel_Shared_File
37{
38        /*
39         * Use Temp or File Upload Temp for temporary files
40         *
41         * @protected
42         * @var boolean
43         */
44        protected static $_useUploadTempDirectory       = FALSE;
45
46
47        /**
48         * Set the flag indicating whether the File Upload Temp directory should be used for temporary files
49         *
50         * @param        boolean        $useUploadTempDir               Use File Upload Temporary directory (true or false)
51         */
52        public static function setUseUploadTempDirectory($useUploadTempDir = FALSE) {
53                self::$_useUploadTempDirectory = (boolean) $useUploadTempDir;
54        }       //      function setUseUploadTempDirectory()
55
56
57        /**
58         * Get the flag indicating whether the File Upload Temp directory should be used for temporary files
59         *
60         * @return       boolean        Use File Upload Temporary directory (true or false)
61         */
62        public static function getUseUploadTempDirectory() {
63                return self::$_useUploadTempDirectory;
64        }       //      function getUseUploadTempDirectory()
65
66
67        /**
68          * Verify if a file exists
69          *
70          * @param      string  $pFilename      Filename
71          * @return bool
72          */
73        public static function file_exists($pFilename) {
74                // Sick construction, but it seems that
75                // file_exists returns strange values when
76                // doing the original file_exists on ZIP archives...
77                if ( strtolower(substr($pFilename, 0, 3)) == 'zip' ) {
78                        // Open ZIP file and verify if the file exists
79                        $zipFile                = substr($pFilename, 6, strpos($pFilename, '#') - 6);
80                        $archiveFile    = substr($pFilename, strpos($pFilename, '#') + 1);
81
82                        $zip = new ZipArchive();
83                        if ($zip->open($zipFile) === true) {
84                                $returnValue = ($zip->getFromName($archiveFile) !== false);
85                                $zip->close();
86                                return $returnValue;
87                        } else {
88                                return false;
89                        }
90                } else {
91                        // Regular file_exists
92                        return file_exists($pFilename);
93                }
94        }
95
96        /**
97         * Returns canonicalized absolute pathname, also for ZIP archives
98         *
99         * @param string $pFilename
100         * @return string
101         */
102        public static function realpath($pFilename) {
103                // Returnvalue
104                $returnValue = '';
105
106                // Try using realpath()
107                if (file_exists($pFilename)) {
108                        $returnValue = realpath($pFilename);
109                }
110
111                // Found something?
112                if ($returnValue == '' || ($returnValue === NULL)) {
113                        $pathArray = explode('/' , $pFilename);
114                        while(in_array('..', $pathArray) && $pathArray[0] != '..') {
115                                for ($i = 0; $i < count($pathArray); ++$i) {
116                                        if ($pathArray[$i] == '..' && $i > 0) {
117                                                unset($pathArray[$i]);
118                                                unset($pathArray[$i - 1]);
119                                                break;
120                                        }
121                                }
122                        }
123                        $returnValue = implode('/', $pathArray);
124                }
125
126                // Return
127                return $returnValue;
128        }
129
130        /**
131         * Get the systems temporary directory.
132         *
133         * @return string
134         */
135        public static function sys_get_temp_dir()
136        {
137                if (self::$_useUploadTempDirectory) {
138                        //  use upload-directory when defined to allow running on environments having very restricted
139                        //      open_basedir configs
140                        if (ini_get('upload_tmp_dir') !== FALSE) {
141                                if ($temp = ini_get('upload_tmp_dir')) {
142                                        if (file_exists($temp))
143                                                return realpath($temp);
144                                }
145                        }
146                }
147
148                // sys_get_temp_dir is only available since PHP 5.2.1
149                // http://php.net/manual/en/function.sys-get-temp-dir.php#94119
150                if ( !function_exists('sys_get_temp_dir')) {
151                        if ($temp = getenv('TMP') ) {
152                                if ((!empty($temp)) && (file_exists($temp))) { return realpath($temp); }
153                        }
154                        if ($temp = getenv('TEMP') ) {
155                                if ((!empty($temp)) && (file_exists($temp))) { return realpath($temp); }
156                        }
157                        if ($temp = getenv('TMPDIR') ) {
158                                if ((!empty($temp)) && (file_exists($temp))) { return realpath($temp); }
159                        }
160
161                        // trick for creating a file in system's temporary dir
162                        // without knowing the path of the system's temporary dir
163                        $temp = tempnam(__FILE__, '');
164                        if (file_exists($temp)) {
165                                unlink($temp);
166                                return realpath(dirname($temp));
167                        }
168
169                        return null;
170                }
171
172                // use ordinary built-in PHP function
173                //      There should be no problem with the 5.2.4 Suhosin realpath() bug, because this line should only
174                //              be called if we're running 5.2.1 or earlier
175                return realpath(sys_get_temp_dir());
176        }
177
178}
Note: See TracBrowser for help on using the repository browser.