root/trunk/lib/SGL/File.php

Revision 3122, 2.3 kB (checked in by demian, 3 weeks ago)

bugfix to trunk merge

Line 
1 <?php
2 /**
3  * File management utility methods.
4  *
5  */
6 class SGL_File
7 {
8     /**
9      * Copies directories recursively.
10      *
11      * @static
12      * @param string $source
13      * @param string $dest
14      * @param boolean $overwrite
15      * @return boolean
16      * @todo chmod is needed
17      */
18     function copyDir($source, $dest, $overwrite = false)
19     {
20         if (!is_dir($dest)) {
21             if (!is_writable(dirname($dest))) {
22                 return SGL::raiseError('filesystem not writable', SGL_ERROR_INVALIDFILEPERMS);
23             }
24             mkdir($dest);
25         }
26         // if the folder exploration is successful, continue
27         if ($handle = opendir($source)) {
28             // as long as storing the next file to $file is successful, continue
29             while (false !== ($file = readdir($handle))) {
30                 if ($file != '.' && $file != '..') {
31                     $path = $source . '/' . $file;
32                     if (is_file($path)) {
33                         if (!is_file($dest . '/' . $file) || $overwrite) {
34                             if (!@copy($path, $dest . '/' . $file)){
35                                 return SGL::raiseError('filesystem not writable',
36                                     SGL_ERROR_INVALIDFILEPERMS);
37                             }
38                         }
39                     } elseif (is_dir($path)) {
40                         if (!is_dir($dest . '/' . $file)) {
41                             if (!is_writable(dirname($dest . '/' . $file))) {
42                                 return SGL::raiseError('filesystem not writable',
43                                     SGL_ERROR_INVALIDFILEPERMS);
44                             }
45                             mkdir($dest . '/' . $file); // make subdirectory before subdirectory is copied
46                         }
47                         SGL_File::copyDir($path, $dest . '/' . $file, $overwrite); //recurse
48                     }
49                 }
50             }
51             closedir($handle);
52         }
53         return true;
54     }
55
56     /**
57      * Removes a directory and its contents recursively.
58      *
59      * @param string $dir  path to directory
60      */
61     function rmDir($dir, $args = '')
62     {
63         require_once 'System.php';
64         if ($args && $args[0] == '-') {
65             $args = substr($args, 1);
66         }
67         System::rm("-{$args}f $dir");
68     }
69 }
70 ?>
Note: See TracBrowser for help on using the browser.