getState('directory'); // Remove the trailing slash and commit it in the state $this->setState('directory', rtrim($dir, '/')); // Parse directory to parts $parsed_dir = trim($dir,'/'); $parts = empty($parsed_dir) ? array() : explode('/', $parsed_dir); // Find the path to the parent directory if (!empty($parts)) { $copy_of_parts = $parts; array_pop($copy_of_parts); if (!empty($copy_of_parts)) { $parent_directory = '/' . implode('/', $copy_of_parts); } else { $parent_directory = '/'; } } else { $parent_directory = '/'; } $options = array( 'host' => $this->getState('host'), 'port' => $this->getState('port'), 'username' => $this->getState('username'), 'password' => $this->getState('password'), 'directory' => $this->getState('directory'), 'privKey' => $this->getState('privKey'), 'pubKey' => $this->getState('pubKey'), ); $list = false; $error = ''; try { $sftp = new Sftp($options); $list = $sftp->listFolders(); } catch (\RuntimeException $e) { $error = $e->getMessage(); // Did I get an error while fetching the list of folders? Let's try using the working dir if(isset($sftp)) { try { $dir = rtrim($sftp->cwd(), '/').'/'.trim($dir, '/'); $dir = rtrim($dir, '/'); $this->setState('directory', $dir); $list = $sftp->listFolders($dir); $error = ''; $parsed_dir = trim($dir,'/'); $parts = empty($parsed_dir) ? array() : explode('/', $parsed_dir); // Find the path to the parent directory if (!empty($parts)) { $copy_of_parts = $parts; array_pop($copy_of_parts); if (!empty($copy_of_parts)) { $parent_directory = '/' . implode('/', $copy_of_parts); } else { $parent_directory = '/'; } } else { $parent_directory = '/'; } } catch(\RuntimeException $e) { $error = $e->getMessage(); } } } $response_array = array( 'error' => $error, 'list' => $list, 'breadcrumbs' => $parts, 'directory' => $this->getState('directory'), 'parent' => $parent_directory ); return $response_array; } }