copy_dir

Definition:
function copy_dir($from, $to, $skip_list = array() {}

Copies a directory from one location to another via the WordPress Filesystem Abstraction.
Assumes that WP_Filesystem() has already been called and setup.

Parameters

  • string $from: source directory
  • string $to: destination directory
  • array $skip_list: a list of files/folders to skip copying

Return values

returns:WP_Error on failure, True on success.

Source code

function copy_dir($from, $to, $skip_list = array() ) {

	global $wp_filesystem;



	$dirlist = $wp_filesystem->dirlist($from);



	$from = trailingslashit($from);

	$to = trailingslashit($to);



	$skip_regex = '';

	foreach ( (array)$skip_list as $key => $skip_file )

		$skip_regex .= preg_quote($skip_file, '!') . '|';



	if ( !empty($skip_regex) )

		$skip_regex = '!(' . rtrim($skip_regex, '|') . ')$!i';



	foreach ( (array) $dirlist as $filename => $fileinfo ) {

		if ( !empty($skip_regex) )

			if ( preg_match($skip_regex, $from . $filename) )

				continue;



		if ( 'f' == $fileinfo['type'] ) {

			if ( ! $wp_filesystem->copy($from . $filename, $to . $filename, true, FS_CHMOD_FILE) ) {

				// If copy failed, chmod file to 0644 and try again.

				$wp_filesystem->chmod($to . $filename, 0644);

				if ( ! $wp_filesystem->copy($from . $filename, $to . $filename, true, FS_CHMOD_FILE) )

					return new WP_Error('copy_failed', __('Could not copy file.'), $to . $filename);

			}

		} elseif ( 'd' == $fileinfo['type'] ) {

			if ( !$wp_filesystem->is_dir($to . $filename) ) {

				if ( !$wp_filesystem->mkdir($to . $filename, FS_CHMOD_DIR) )

					return new WP_Error('mkdir_failed', __('Could not create directory.'), $to . $filename);

			}

			$result = copy_dir($from . $filename, $to . $filename, $skip_list);

			if ( is_wp_error($result) )

				return $result;

		}

	}

	return true;

}

727

No comments yet... Be the first to leave a reply!

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: