/** * Рекурсивная функция для копирования директории со всеми * вложенными элементами. * * @param RecursiveDirectoryIterator $iterator * @param string $pathDestDir * @param integer $dirmode * @param integer $filemode * @throws System_FSException */ private function coping(\RecursiveDirectoryIterator $iterator, $pathDestDir, $copyMode = CopyMode::SKIP_EXISTING, $dirmode = 0755, $filemode = 0644) { foreach ($iterator as $fileinfo) { $destDir = new FileInfo($pathDestDir . '/' . $fileinfo->getBasename()); if ($iterator->hasChildren()) { if ($destDir->isLink() || $destDir->isFile()) { throw new Exception\UnexpectedValueException(); } elseif (!$destDir->isDir()) { $destDir->controlDirectory()->create($dirmode); } $this->coping($iterator->getChildren(), $destDir->getRealPath(), $dirmode, $filemode); } elseif ($fileinfo->isLink()) { $fileinfo->openLink()->copyTo($destDir->getRealPath(), $copyMode); } elseif ($fileinfo->isFile()) { $fileinfo->openFile()->copyTo($destDir->getRealPath(), $copyMode); } } }