コード例 #1
0
 /**
  * Рекурсивная функция для копирования директории со всеми
  * вложенными элементами.
  *
  * @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);
         }
     }
 }