mkdir ( $base ); } $base .= DIRECTORY_SEPARATOR; } } /** * Copy a file, or recursively copy a folder and its contents; modified * so that copied files, if PHP, have includes removed * @note Adapted from http://aidanlister.com/repos/v/function.copyr.php */ public 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 )) { $this->mkdir ( $dest ); } // Loop through the folder $dir = $this->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; } /** * 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. This function * applies to copyr(). */ public function copyable($file) { return true; } /** * Delete a file, or a folder and its contents * @note Adapted from http://aidanlister.com/repos/v/function.rmdirr.php */ public function rmdirr($dirname) { // Sanity check if (! $this->file_exists ( $dirname )) { return false; } // Simple delete for a file if ($this->is_file ( $dirname ) || $this->is_link ( $dirname )) { return $this->unlink ( $dirname ); } // Loop through the folder $dir = $this->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 $this->rmdir ( $dirname ); } /** * Recursively globs a directory. */ public function globr($dir, $pattern, $flags = NULL) { $files = $this->glob ( "$dir/$pattern", $flags ); if ($files === false) $files = array (); $sub_dirs = $this->glob ( "$dir/*", GLOB_ONLYDIR ); if ($sub_dirs === false) $sub_dirs = array (); foreach ( $sub_dirs as $sub_dir ) { $sub_files = $this->globr ( $sub_dir, $pattern, $flags ); $files = array_merge ( $files, $sub_files ); } return $files; } /** * Allows for PHP functions to be called and be stubbed. * @warning This function will not work for functions that need * to pass references; manually define a stub function for those. */ public function __call($name, $args) { return call_user_func_array ( $name, $args ); } } // vim: et sw=4 sts=4