summaryrefslogtreecommitdiff
path: root/inc/io.php
diff options
context:
space:
mode:
authorChristopher Smith <chris@jalakai.co.uk>2014-03-12 18:39:11 +0000
committerChristopher Smith <chris@jalakai.co.uk>2014-03-12 18:39:11 +0000
commit4e60057c8ccbee18b94a64208311f9bbb338eec6 (patch)
tree08d79159aa78693c27f54ecebc3105034dfc5933 /inc/io.php
parent57a6f99d09d3662a8a2ad72e312aa6f53bcc2d01 (diff)
parent069942acdaa5ba825bc3f92c7093b5071789f1ca (diff)
downloadrpg-4e60057c8ccbee18b94a64208311f9bbb338eec6.tar.gz
rpg-4e60057c8ccbee18b94a64208311f9bbb338eec6.tar.bz2
Merge branch 'master' into tablethead
Diffstat (limited to 'inc/io.php')
-rw-r--r--inc/io.php54
1 files changed, 51 insertions, 3 deletions
diff --git a/inc/io.php b/inc/io.php
index 4bd7c3364..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);
@@ -393,7 +391,7 @@ function io_mkdir_p($target){
return io_mkdir_ftp($dir);
}else{
$ret = @mkdir($target,$conf['dmode']); // crawl back up & create dir tree
- if($ret && $conf['dperm']) chmod($target, $conf['dperm']);
+ if($ret && !empty($conf['dperm'])) chmod($target, $conf['dperm']);
return $ret;
}
}
@@ -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