diff --git a/lib/Touki/FTP/FTPWrapper.php b/lib/Touki/FTP/FTPWrapper.php index cd5317f..4db2d20 100644 --- a/lib/Touki/FTP/FTPWrapper.php +++ b/lib/Touki/FTP/FTPWrapper.php @@ -79,7 +79,11 @@ public function setConnection(ConnectionInterface $connection) */ public function get($localFile, $remoteFile, $mode = self::BINARY, $resumepos = 0) { - return ftp_get($this->connection->getStream(), $localFile, $remoteFile, $mode, $resumepos); + try{ + return ftp_get($this->connection->getStream(), $localFile, $remoteFile, $mode, $resumepos); + }catch (\Exception $e){ + return ftp_get($this->connection->getStream(), $localFile, str_replace(' ', '\\ ', $remoteFile), $mode, $resumepos); + } } /** diff --git a/lib/Touki/FTP/FilesystemFactory.php b/lib/Touki/FTP/FilesystemFactory.php index 56f4056..cef992a 100644 --- a/lib/Touki/FTP/FilesystemFactory.php +++ b/lib/Touki/FTP/FilesystemFactory.php @@ -52,7 +52,10 @@ public function build($input, $prefix = '') $filesystem = $this->resolveFile($type); $permParts = str_split(substr($parts[0], 1, 9), 3); $hours = sscanf($parts[7], "%d:%d"); - $name = implode(' ', array_slice($parts, 8)); + + $nameStart = strpos($input, $parts[7]); + $nameStart += strlen($parts[7]) + 1; + $name = trim(substr($input, $nameStart)); if (null === $hours[1]) { $year = $hours[0]; diff --git a/lib/Touki/FTP/Manager/FTPFilesystemManager.php b/lib/Touki/FTP/Manager/FTPFilesystemManager.php index b38080d..bc48201 100644 --- a/lib/Touki/FTP/Manager/FTPFilesystemManager.php +++ b/lib/Touki/FTP/Manager/FTPFilesystemManager.php @@ -71,6 +71,7 @@ public function findBy($directory, $callable) } $directory = '/'.ltrim($directory, '/'); + $raw = $this->wrapper->rawlist($directory); $list = array(); @@ -78,6 +79,10 @@ public function findBy($directory, $callable) throw new DirectoryException(sprintf("Directory %s not found", $directory)); } + if(is_array($raw) && empty($raw)){ + $raw = $this->wrapper->rawlist(str_replace(' ', '\\ ', $directory)); + } + foreach ($raw as $item) { $fs = $this->factory->build($item, $directory); @@ -158,6 +163,11 @@ public function findOneBy($directory, $callable) throw new DirectoryException(sprintf("Directory %s not found", $directory)); } + if(is_array($raw) && empty($raw)){ + $raw = $this->wrapper->rawlist(str_replace(' ', '\\ ', $directory)); + } + + foreach ($raw as $item) { $fs = $this->factory->build($item, $directory); @@ -170,6 +180,7 @@ public function findOneBy($directory, $callable) } } + return null; }