]> 91.132.146.200 Git - dolphin.git/commitdiff
delete recursive a dir
authorBanana <johannes.kessler@bechtle.com>
Tue, 19 Feb 2013 08:06:08 +0000 (09:06 +0100)
committerBanana <johannes.kessler@bechtle.com>
Tue, 19 Feb 2013 08:06:08 +0000 (09:06 +0100)
single-functions/recursive-remove-dir.php [new file with mode: 0644]

diff --git a/single-functions/recursive-remove-dir.php b/single-functions/recursive-remove-dir.php
new file mode 100644 (file)
index 0000000..a6f8fa6
--- /dev/null
@@ -0,0 +1,95 @@
+<?php
+/**
+ *  dolphin. Collection of useful PHP skeletons.
+ *  Copyright (C) 2013  Johannes 'Banana' Keßler
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the COMMON DEVELOPMENT AND DISTRIBUTION LICENSE
+ *
+ * You should have received a copy of the
+ * COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) Version 1.0
+ * along with this program.  If not, see http://www.sun.com/cddl/cddl.html
+ */
+
+
+/**
+ * delete and/or empty a diretory
+ *
+ * $empty = true => empty the diretory but do not delete it
+ *
+ * @param string $directory
+ * @param boolean $empty
+ * @param int $fTime If not false remove files older then this value in sec.
+ * @return boolean
+ */
+function recursive_remove_directory($directory, $empty=false,$fTime=false) {
+       // if the path has a slash at the end we remove it here
+       if(substr($directory,-1) == '/') {
+               $directory = substr($directory,0,-1);
+       }
+
+       // if the path is not valid or is not a directory ...
+       if(!file_exists($directory) || !is_dir($directory)) {
+               // ... we return false and exit the function
+               return false;
+
+       // ... if the path is not readable
+       }elseif(!is_readable($directory)) {
+               // ... we return false and exit the function
+               return false;
+
+       // ... else if the path is readable
+       }
+       else {
+               // we open the directory
+               $handle = opendir($directory);
+
+               // and scan through the items inside
+               while (false !== ($item = readdir($handle))) {
+                       // if the filepointer is not the current directory
+                       // or the parent directory
+                       //if($item != '.' && $item != '..' && $item != '.svn') {
+                       if($item[0] != '.') {
+                               // we build the new path to delete
+                               $path = $directory.'/'.$item;
+
+                               // if the new path is a directory
+                               if(is_dir($path)) {
+                                  // we call this function with the new path
+                                       recursive_remove_directory($path);
+
+                               // if the new path is a file
+                               }
+                               else {
+                                       // we remove the file
+                                       if($fTime !== false && is_int($fTime)) {
+                                               // check filemtime
+                                               $ft = filemtime($path);
+                                               $offset = time()-$fTime;
+                                               if($ft <= $offset) {
+                                                       unlink($path);
+                                               }
+                                       }
+                                       else {
+                                               unlink($path);
+                                       }
+                               }
+                       }
+               }
+               // close the directory
+               closedir($handle);
+
+               // if the option to empty is not set to true
+               if($empty == false) {
+                       // try to delete the now empty directory
+                       if(!rmdir($directory)) {
+                               // return false if not possible
+                               return false;
+                       }
+               }
+               // return success
+               return true;
+       }
+}
+
+?>