* @version 1.0.1-modified * @link http://aidanlister.com/repos/v/function.copyr.php * @param string $source Source path * @param string $dest Destination path * @return bool Returns TRUE on success, FALSE on failure */ function copyr($source, $dest) { // Simple copy for a file if (is_file($source)) { return $this->copy($source, $dest); } // Make destination directory if (!is_dir($dest)) { mkdir($dest); } // Loop through the folder $dir = dir($source); while (false !== $entry = $dir->read()) { // Skip pointers if ($entry == '.' || $entry == '..') { continue; } if (!$this->copyable($entry)) { continue; } // Deep copy directories if ($dest !== "$source/$entry") { $this->copyr("$source/$entry", "$dest/$entry"); } } // Clean up $dir->close(); return true; } /** * Stub for PHP's built-in copy function, can be used to overload * functionality */ function copy($source, $dest) { return copy($source, $dest); } /** * Overloadable function that tests a filename for copyability. By * default, everything should be copied; you can restrict things to * ignore hidden files, unreadable files, etc. */ function copyable($file) { return true; } /** * Delete a file, or a folder and its contents * * @author Aidan Lister * @version 1.0.3 * @link http://aidanlister.com/repos/v/function.rmdirr.php * @param string $dirname Directory to delete * @return bool Returns TRUE on success, FALSE on failure */ function rmdirr($dirname) { // Sanity check if (!file_exists($dirname)) { return false; } // Simple delete for a file if (is_file($dirname) || is_link($dirname)) { return unlink($dirname); } // Loop through the folder $dir = dir($dirname); while (false !== $entry = $dir->read()) { // Skip pointers if ($entry == '.' || $entry == '..') { continue; } // Recurse $this->rmdirr($dirname . DIRECTORY_SEPARATOR . $entry); } // Clean up $dir->close(); return rmdir($dirname); } }