$files->copy() method

Copy all files recursively from one directory ($src) to another directory ($dst)

Unlike PHP's copy() function, this method performs a recursive copy by default, ensuring that all files and directories in the source ($src) directory are duplicated in the destination ($dst) directory.

This method can also be used to copy single files. If a file is specified for $src, and only a path is specified for $dst, then the original filename will be retained in $dst.


// Copy everything from /site/assets/cache/foo/ to /site/assets/cache/bar/
$copyFrom = $config->paths->cache . "foo/";
$copyTo = $config->paths->cache . "bar/";
$files->copy($copyFrom, $copyTo); 


// basic usage
$bool = $files->copy(string $src, string $dst);

// usage with all arguments
$bool = $files->copy(string $src, string $dst, $options = []);



Path to copy files from, or filename to copy.


Path (or filename) to copy file(s) to. Directory is created if it doesn't already exist.

options (optional)bool, array

Array of options:

  • recursive (boolean): Whether to copy directories within recursively. (default=true)
  • allowEmptyDirs (boolean): Copy directories even if they are empty? (default=true)
  • limitPath (bool|string|array): Limit copy to within path given here, or true for site assets path (default=false).
  • Note that the limitPath option was added in 3.0.118.
  • If a boolean is specified for $options, it is assumed to be the recursive option.

Return value


True on success, false on failure.


Method can throw exceptions on error:

  • WireException - if limitPath option is used and either $src or $dst is not allowed

$files methods and properties

API reference based on ProcessWire core version 3.0.160

Twitter updates

  • ProcessWire 3.0.161 adds support for selector operator stacking, enabling you automatically broaden searches in a single pages.find() call— More
    26 June 2020
  • ProcessWire 3.0.160 adds powerful new text-searching operators, bringing a new level of power to page-finding API calls, especially when it comes to search engine type queries. Post also includes a demo search engine where you can test it all out live— More
    19 June 2020
  • Preview of ProcessWire 3.0.160 with auto-enable of two-factor authentication, new version of TfaEmail and TfaTotp, and new selector operators coming next week. More
    12 June 2020

Latest news

  • ProcessWire Weekly #320
    In the 320th issue of ProcessWire Weekly we're going to check out the latest core updates (ProcessWire 3.0.161), a new third party module called Fieldtype Runtime only, an IndieWeb themed article from Francesco Schwarz, and more. Read on!
    Weekly.pw / 27 June 2020
  • Powerful new text-searching abilities in 3.0.160
    In ProcessWire 3.0.160 we’ve got some major upgrades and additions to our text-search abilities. This brings a whole new level of power to $pages->find() and similar API calls, especially when it comes to search engine type queries.
    Blog / 19 June 2020
  • Subscribe to weekly ProcessWire news

“…building with ProcessWire was a breeze, I really love all the flexibility the system provides. I can’t imagine using any other CMS in the future.” —Thomas Aull