. */ /** * Recursively deletes a directory tree. * * @param string $folder The directory path. * @param bool $keepRootFolder Whether to keep the top-level folder. * @return bool TRUE on success, otherwise FALSE. */ function deleteTree( $folder, $keepRootFolder = false ) { // Handle bad arguments. if (empty($folder) || !file_exists($folder)) { return true; // No such file/folder exists. } elseif (is_file($folder) || is_link($folder)) { return @unlink($folder); // Delete file/link. } // Delete all children. $files = new RecursiveIteratorIterator( new RecursiveDirectoryIterator($folder, RecursiveDirectoryIterator::SKIP_DOTS), RecursiveIteratorIterator::CHILD_FIRST ); foreach ($files as $fileinfo) { $action = ($fileinfo->isDir() ? 'rmdir' : 'unlink'); if (!@$action($fileinfo->getRealPath())) { return false; // Abort due to the failure. } } // Delete the root folder itself? return (!$keepRootFolder ? @rmdir($folder) : true); }