/** * copy dir and all inside * * @param Response $response * @param string $target * @param string $dst * @param string $newFolder */ private function copyDir(Response $response, $target, $dst, $newFolder = '') { $folder = trim(strrchr($target, DIRECTORY_SEPARATOR), DIRECTORY_SEPARATOR); $newFolder = $newFolder ?: $dst . DIRECTORY_SEPARATOR . $folder; if (file_exists($newFolder)) { throw new ExistsException(sprintf('folder "%s" exists', $newFolder)); } mkdir($newFolder); $response->addAdded($this->getFileInfo($newFolder)); foreach (glob($target . '/*') as $name) { if (is_dir($name)) { $this->copyDir($response, $name, $newFolder); } else { $filename = $newFolder . DIRECTORY_SEPARATOR . pathinfo($name, PATHINFO_BASENAME); copy($name, $filename); $response->addAdded($this->getFileInfo($filename)); } } }