/** * Get files in directory locally and remotely. * * @param string $dir full path to directory * * @return array of files */ public function getFilesInDirectory($dir) { if ($this->validPathStr($dir) === false) { throw new \Exception('Directory path is not valid. Possible security issue.'); } $files = array(); $basePath = $this->addEndingSlash($this->command->getGitEnvironment()->getPath()); $relativePath = $dir; if ($relativePath) { $relativePath = $this->addEndingSlash($relativePath); } if ($this->command->getGitEnvironment()->getSsh() === true) { //Remote Directory Listing $directoryList = $this->command->getSftpProcess()->getDirectoryList($basePath . $relativePath); foreach ($directoryList as $filename => $fileData) { if ($filename !== '.' && $filename !== '..' && $filename !== '.git') { $fileData['fullPath'] = $basePath . rtrim($relativePath, '/') . '/' . $filename; $fileData['gitPath'] = $relativePath . $filename; $remoteFileInfo = new RemoteFileInfo($fileData); if ($remoteFileInfo->isFile()) { } $files[] = $remoteFileInfo; } } } else { //Local Directory Listing $directoryIterator = new \DirectoryIterator($basePath . $dir); $directoryIterator->setInfoClass('\\VersionControl\\GitCommandBundle\\Entity\\FileInfo'); foreach ($directoryIterator as $fileInfo) { if (!$fileInfo->isDot() && $fileInfo->getFilename() !== '.git') { $newFileInfo = $fileInfo->getFileInfo(); $newFileInfo->setGitPath($relativePath . $fileInfo->getFilename()); $files[] = $newFileInfo; } } } $this->sortFilesByDirectoryThenName($files); return $files; }
public function testCreateDirectoryIterator_DirectoryContainingFiles() { $this->storage->createDirectory('some_directory/'); $directory = new DirectoryObject($this->storage->getPath('some_directory/')); $expected = new \DirectoryIterator($this->storage->getPath('some_directory/')); $expected->setFileClass('Stalxed\\FileSystem\\FileObject'); $expected->setInfoClass('Stalxed\\FileSystem\\FileInfo'); $this->assertEquals($expected, $directory->createDirectoryIterator()); }
/** * Создаёт объект DirectoryIterator для текущей директории. * * @return DirectoryIterator */ public function createDirectoryIterator() { $iterator = new \DirectoryIterator($this->getRealPath()); $iterator->setFileClass('Stalxed\\FileSystem\\FileObject'); $iterator->setInfoClass('Stalxed\\FileSystem\\FileInfo'); return $iterator; }