source: trunk/plugins/ImageManager/Classes/Files.php @ 524

Last change on this file since 524 was 524, checked in by koto, 13 years ago
File size: 6.3 KB
Line 
1<?php
2/**
3 * File Utilities.
4 * @author $Author: Wei Zhuo $
5 * @version $Id: Files.php 26 2004-03-31 02:35:21Z Wei Zhuo $
6 * @package ImageManager
7 */
8
9define('FILE_ERROR_NO_SOURCE', 100);
10define('FILE_ERROR_COPY_FAILED', 101);
11define('FILE_ERROR_DST_DIR_FAILED', 102);
12define('FILE_COPY_OK', 103);
13
14/**
15 * File Utilities
16 * @author $Author: Wei Zhuo $
17 * @version $Id: Files.php 26 2004-03-31 02:35:21Z Wei Zhuo $
18 * @package ImageManager
19 * @subpackage files
20 */
21class Files
22{
23       
24        /**
25         * Copy a file from source to destination. If unique == true, then if
26         * the destination exists, it will be renamed by appending an increamenting
27         * counting number.
28         * @param string $source where the file is from, full path to the files required
29         * @param string $destination_file name of the new file, just the filename
30         * @param string $destination_dir where the files, just the destination dir,
31         * e.g., /www/html/gallery/
32         * @param boolean $unique create unique destination file if true.
33         * @return string the new copied filename, else error if anything goes bad.
34         */
35        function copyFile($source, $destination_dir, $destination_file, $unique=true)
36        {
37                if(!(file_exists($source) && is_file($source)))
38                        return FILE_ERROR_NO_SOURCE;
39
40                $destination_dir = Files::fixPath($destination_dir);
41
42                if(!is_dir($destination_dir))
43                        Return FILE_ERROR_DST_DIR_FAILED;
44
45                $filename = Files::escape($destination_file);
46
47                if($unique)
48                {
49                        $dotIndex = strrpos($destination_file, '.');
50                        $ext = '';
51                        if(is_int($dotIndex))
52                        {
53                                $ext = substr($destination_file, $dotIndex);
54                                $base = substr($destination_file, 0, $dotIndex);
55                        }
56                        $counter = 0;
57                        while(is_file($destination_dir.$filename))
58                        {
59                                $counter++;
60                                $filename = $base.'_'.$counter.$ext;
61                        }
62                }
63
64                if (!copy($source, $destination_dir.$filename))
65                        return FILE_ERROR_COPY_FAILED;
66               
67                //verify that it copied, new file must exists
68                if (is_file($destination_dir.$filename))
69                        Return $filename;
70                else
71                        return FILE_ERROR_COPY_FAILED;
72        }
73
74        /**
75         * Create a new folder.
76         * @param string $newFolder specifiy the full path of the new folder.
77         * @return boolean true if the new folder is created, false otherwise.
78         */
79        function createFolder($newFolder)
80        {
81                mkdir ($newFolder, 0777);
82                return chmod($newFolder, 0777);
83        }
84
85
86        /**
87         * Escape the filenames, any non-word characters will be
88         * replaced by an underscore.
89         * @param string $filename the orginal filename
90         * @return string the escaped safe filename
91         */
92        function escape($filename)
93        {
94                Return preg_replace('/[^\w\._]/', '_', $filename);
95        }
96
97        /**
98         * Delete a file.
99         * @param string $file file to be deleted
100         * @return boolean true if deleted, false otherwise.
101         */
102        function delFile($file)
103        {
104                if(is_file($file))
105                        Return unlink($file);
106                else
107                        Return false;
108        }
109
110        /**
111         * Delete folder(s), can delete recursively.
112         * @param string $folder the folder to be deleted.
113         * @param boolean $recursive if true, all files and sub-directories
114         * are delete. If false, tries to delete the folder, can throw
115         * error if the directory is not empty.
116         * @return boolean true if deleted.
117         */
118        function delFolder($folder, $recursive=false)
119        {
120                $deleted = true;
121                if($recursive)
122                {
123                        $d = dir($folder);
124                        while (false !== ($entry = $d->read()))
125                        {
126                                if ($entry != '.' && $entry != '..')
127                                {
128                                        $obj = Files::fixPath($folder).$entry;
129                                        //var_dump($obj);
130                                        if (is_file($obj))
131                                        {
132                                                $deleted &= Files::delFile($obj);                                       
133                                        }
134                                        else if(is_dir($obj))
135                                        {
136                                                $deleted &= Files::delFolder($obj, $recursive);
137                                        }
138                                       
139                                }
140                        }
141                        $d->close();
142
143                }
144
145                //$folder= $folder.'/thumbs';
146                //var_dump($folder);
147                if(is_dir($folder))
148                        $deleted &= rmdir($folder);
149                else
150                        $deleted &= false;
151
152                Return $deleted;
153        }
154
155        /**
156         * Append a / to the path if required.
157         * @param string $path the path
158         * @return string path with trailing /
159         */
160        function fixPath($path)
161        {
162                //append a slash to the path if it doesn't exists.
163                if(!(substr($path,-1) == '/'))
164                        $path .= '/';
165                Return $path;
166        }
167
168        /**
169         * Concat two paths together. Basically $pathA+$pathB
170         * @param string $pathA path one
171         * @param string $pathB path two
172         * @return string a trailing slash combinded path.
173         */
174        function makePath($pathA, $pathB)
175        {
176                $pathA = Files::fixPath($pathA);
177                if(substr($pathB,0,1)=='/')
178                        $pathB = substr($pathB,1);
179                Return Files::fixPath($pathA.$pathB);
180        }
181
182        /**
183         * Similar to makePath, but the second parameter
184         * is not only a path, it may contain say a file ending.
185         * @param string $pathA the leading path
186         * @param string $pathB the ending path with file
187         * @return string combined file path.
188         */
189        function makeFile($pathA, $pathB)
190        {               
191                $pathA = Files::fixPath($pathA);
192                if(substr($pathB,0,1)=='/')
193                        $pathB = substr($pathB,1);
194               
195                Return $pathA.$pathB;
196        }
197
198       
199        /**
200         * Format the file size, limits to Mb.
201         * @param int $size the raw filesize
202         * @return string formated file size.
203         */
204        function formatSize($size)
205        {
206                if($size < 1024)
207                        return $size.' bytes'; 
208                else if($size >= 1024 && $size < 1024*1024)
209                        return sprintf('%01.2f',$size/1024.0).' Kb';   
210                else
211                        return sprintf('%01.2f',$size/(1024.0*1024)).' Mb';     
212        }
213
214        /**
215         * Returns size of a directory, with all file & subdirectory
216         * sizes added up
217         * @param string dir path
218         * @return int
219         */
220        function dirSize($dirName = '.')
221        {
222                $dir  = dir($dirName);
223                $size = 0;
224
225                while ($file = $dir->read()) {
226                        if ($file != '.' && $file != '..')
227                        {
228                                if (is_dir("$dirName$file"))
229                                {
230                                        $size += Files::dirSize($dirName . '/' . $file);
231                                }
232                                else
233                                {
234                                        $size += filesize($dirName . '/' . $file);
235                                }
236                        }
237                }
238                $dir->close();
239                return $size;
240        }
241       
242        /**
243         * Renames file, preserving its directory and extension
244         * @param string $oldPath path to the old existing file
245         * @param string new filename (just the name, without path or extension)
246         * @author Krzysztof Kotowicz <koto@webworkers.pl>
247         */
248        function renameFile($oldPath, $newName) {
249
250                if(!(file_exists($oldPath) && is_file($oldPath)))
251                        return FILE_ERROR_NO_SOURCE;
252
253                $oldFileParts = pathinfo($oldPath);
254
255                $newPath = $oldFileParts['dirname'] . '/'
256                                   . $newName
257                                   . (!empty($oldFileParts['extension']) ? '.' . $oldFileParts['extension'] : '');
258
259                if (file_exists($newPath))
260                        return false;
261
262                if (!rename($oldPath, $newPath))
263                        return FILE_ERROR_COPY_FAILED;
264
265        }
266
267}
268
269?>
Note: See TracBrowser for help on using the repository browser.