/** * @param null|string $Name * * @return SFTP\Directory[]|SFTP\File[] */ public function listDirectory($Name = null) { $this->persistConnection(); if (null === $Name) { $Name = $this->Connection->pwd(); } $List = $this->Connection->rawlist($Name); $Return = array(); foreach ($List as $Item => $Attributes) { if ($this->Connection->is_dir($Item)) { $Return[$Item] = new Directory($this, $Attributes); } if ($this->Connection->is_file($Item)) { $Return[$Item] = new File($this, $Attributes); } } return $Return; }
/** * @param string $root * @param string $relative * @param array $listfiles * @param array $listdirs */ private function getFiles($root, $relative, &$listfiles, &$listdirs) { $files = $this->sftp->rawlist($root . '/' . $relative); if ($files === false) { return; } foreach ($files as $name => $raw) { if ($name != '.' && $name != '..') { if ($raw['type'] == NET_SFTP_TYPE_DIRECTORY) { $listdirs[$relative . '/' . $name] = $raw; $this->getFiles($root, $relative . '/' . $name, $listfiles, $listdirs); } else { $listfiles[$relative . '/' . $name] = $raw; } } } }
/** * Lists files and directories * * @param string $path * @return mixed */ public function ls($path) { if (false === $this->isConnected()) { $this->connectAndLogin(); } $list = $this->sftp->rawlist($path); $retval = array(); if (false === $list) { return $retval; } foreach ($list as $fileOrDirectory => $info) { if ('..' === $fileOrDirectory || '.' === $fileOrDirectory) { continue; } $retval[$fileOrDirectory] = array('type' => 2 == $info['type'] ? 'directory' : 'file', 'mtime' => new \DateTime('@' . $info['mtime'])); } return $retval; }