public function isLink() { return $this->fileInfo->isLink(); }
/** * Move a single file or folder. * * @param SplFileInfo $file The file to move. * * @param string $targetDir The destination directory. * * @param bool $logging Flag determining if actions shall get logged. * * @param IOInterface $ioHandler The io handler to log to. * * @return void * * @throws \RuntimeException When an unknown file type has been encountered. */ private function moveFile(SplFileInfo $file, $targetDir, $logging, $ioHandler) { $pathName = $file->getPathname(); $destinationFile = str_replace($this->tempDir, $targetDir, $pathName); // Symlink must(!) be handled first as the isDir() and isFile() checks return true for symlinks. if ($file->isLink()) { $target = $file->getLinkTarget(); if ($logging) { $ioHandler->write(sprintf('link %s to %s', $target, $destinationFile)); } symlink($target, $destinationFile); unlink($pathName); return; } if ($file->isDir()) { $permissions = substr(decoct(fileperms($pathName)), 1); $this->folders[] = $pathName; if (!is_dir($destinationFile)) { if ($logging) { $ioHandler->write(sprintf('mkdir %s (permissions: %s)', $pathName, $permissions)); } mkdir($destinationFile, octdec($permissions), true); } return; } if ($file->isFile()) { $permissions = substr(decoct(fileperms($pathName)), 1); if ($logging) { $ioHandler->write(sprintf('move %s to %s (permissions: %s)', $pathName, $destinationFile, $permissions)); } copy($pathName, $destinationFile); chmod($destinationFile, octdec($permissions)); unlink($pathName); return; } throw new \RuntimeException(sprintf('Unknown file of type %s encountered for %s', filetype($pathName), $pathName)); }
/** * Copy a path to destination, check if file,directory or link * @param string $source The Source File * @param string $destination The Destination File * @return boolean */ public function copy(\Symfony\Component\Finder\SplFileInfo $source, $destination) { $new_path = $destination . DIRECTORY_SEPARATOR . $source->getRelativePathname(); #Test if Source is a link if ($source->isLink()) { return symlink($source, $new_path); } # Test if source is a directory if ($source->isDir()) { return mkdir($new_path); } #Test if Source is a file if ($source->isFile()) { return copy($source, $new_path); } return FALSE; }