The following function is useful if you wish to clear out all files and folders currently sitting in one particular directory. The function itself requires two parameters, the first being the full path to the directory that your wish to clear out, and the second being a simple TRUE/FALSE that controls whether or not the function needs to try and delete the folder it is trying to clean or simple empty its contents.
In other words, to use this function to totally remove a directory:
-> recursive_remove_directory(‘path/to/directory/to/delete’,FALSE);
To use this function to empty a directory:
-> recursive_remove_directory(‘path/to/full_directory’,TRUE);
Please note the script assumes that you, or rather PHP, has the necessary access rights in order to delete any files or folders that it comes across.
An example usage of the function would be:
if (recursive_remove_directory(str_replace(‘//’,'/’,$_SERVER['DOCUMENT_ROOT'] . ‘/uploads’),TRUE)) { echo ‘folder should now be empty’; } else { echo ‘folder clean process seems to have failed’; }
And now for the actual function itself:
function recursive_remove_directory($directory, $empty = 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 != '..') { // 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 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; } }