Файловые операции - удаление и копирование непустых папок

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
<?
function remove_directory($dir) {
if ($handle = opendir("$dir")) {
while (false !== ($item = readdir($handle))) {
if ($item != "." && $item != "..") {
if (is_dir("$dir/$item")) {
remove_directory("$dir/$item");
} else {
unlink("$dir/$item");
}
}
}
closedir($handle);
rmdir($dir);
}
}
function removeDirRec($dir) {
if ($objs = glob($dir."/*")) {
foreach($objs as $obj) {
is_dir($obj) ? removeDirRec($obj) : unlink($obj);
}
}
rmdir($dir);
}
// copy a directory and all subdirectories and files (recursive)
// void copy_directory( str 'source directory', str 'destination directory' [, bool 'overwrite
function copy_directory($source, $dest, $overwrite = false) {
if($handle = opendir($source)) {
while(false !== ($file = readdir($handle))) {
if($file != '.' && $file != '..') {
$path = $source . '/' . $file;
if(is_file($path)) {
if(!is_file($dest . '/' . $file) || $overwrite)
copy($path, $dest . '/' . $file);
}
elseif(is_dir($path)) {
if(!is_dir($dest . '/' . $file))
mkdir($dest . '/' . $file); // make subdirectory before subdirectory is copied
copy_directory($path, $dest . '/' . $file, $overwrite); //recurse!
}
}
}
closedir($handle);
}
}