diff options
author | Guy Brand <gb@unistra.fr> | 2014-05-05 22:51:26 +0200 |
---|---|---|
committer | Guy Brand <gb@unistra.fr> | 2014-05-05 22:51:26 +0200 |
commit | 43a2e077a27740ebb0f0bc49e4a3d288c8811d78 (patch) | |
tree | e22f94855951702e622d4c40ac44f3031b3d5819 /inc/io.php | |
parent | c6af9e94ed5d7f7713359faac18543db9a9aee48 (diff) | |
parent | 75930869ddcb31470ea7617eddfb882de02645df (diff) | |
download | rpg-43a2e077a27740ebb0f0bc49e4a3d288c8811d78.tar.gz rpg-43a2e077a27740ebb0f0bc49e4a3d288c8811d78.tar.bz2 |
Merge branch 'master' into stable
Diffstat (limited to 'inc/io.php')
-rw-r--r-- | inc/io.php | 52 |
1 files changed, 50 insertions, 2 deletions
diff --git a/inc/io.php b/inc/io.php index eff0279ac..27a34b045 100644 --- a/inc/io.php +++ b/inc/io.php @@ -367,8 +367,6 @@ function io_createNamespace($id, $ns_type='pages') { * @author Andreas Gohr <andi@splitbrain.org> */ function io_makeFileDir($file){ - global $conf; - $dir = dirname($file); if(!@is_dir($dir)){ io_mkdir_p($dir) || msg("Creating directory $dir failed",-1); @@ -401,6 +399,56 @@ function io_mkdir_p($target){ } /** + * Recursively delete a directory + * + * @author Andreas Gohr <andi@splitbrain.org> + * @param string $path + * @param bool $removefiles defaults to false which will delete empty directories only + * @return bool + */ +function io_rmdir($path, $removefiles = false) { + if(!is_string($path) || $path == "") return false; + if(!file_exists($path)) return true; // it's already gone or was never there, count as success + + if(is_dir($path) && !is_link($path)) { + $dirs = array(); + $files = array(); + + if(!$dh = @opendir($path)) return false; + while(false !== ($f = readdir($dh))) { + if($f == '..' || $f == '.') continue; + + // collect dirs and files first + if(is_dir("$path/$f") && !is_link("$path/$f")) { + $dirs[] = "$path/$f"; + } else if($removefiles) { + $files[] = "$path/$f"; + } else { + return false; // abort when non empty + } + + } + closedir($dh); + + // now traverse into directories first + foreach($dirs as $dir) { + if(!io_rmdir($dir, $removefiles)) return false; // abort on any error + } + + // now delete files + foreach($files as $file) { + if(!@unlink($file)) return false; //abort on any error + } + + // remove self + return @rmdir($path); + } else if($removefiles) { + return @unlink($path); + } + return false; +} + +/** * Creates a directory using FTP * * This is used when the safemode workaround is enabled |