Я пишу простой SFTP-клиент в PHP, потому что нам нужно программно извлекать файлы через n удаленных серверов. Я использую расширение PECL SSH2.
Я столкнулся с дорожным блоком. Документация на php.net предполагает, что вы можете это сделать:
$stream = fopen("ssh2.sftp://$sftp/path/to/file", 'r');
Однако у меня есть метод ls, который пытается что-то подобное
public function ls($dir)
{
$rd = "ssh2.sftp://{$this->sftp}/$dir";
$handle = opendir($rd);
if (!is_resource($handle)) {
throw new SFTPException("Could not open directory.");
}
while (false !== ($file = readdir($handle))) {
if (substr($file, 0, 1) != '.'){
print $file . "\n";
}
}
closedir($handle);
}
Я получаю следующую ошибку:
PHP Warning: opendir(): Unable to open ssh2.sftp://Resource id #5/outgoing on remote host
Это имеет смысл, потому что это происходит, когда вы добавляете ресурс в строку. Неверная документация? Я попытался заменить ресурс хостом, именем пользователя и хостом, и это тоже не сработало. Я знаю, что путь правильный, потому что я могу запускать SFTP из командной строки, и он отлично работает.
Кто-нибудь еще пытался использовать SSH2 extenstion с SFTP? Я пропустил что-то очевидное здесь?
UPDATE:
Я устанавливаю sftp на другой машине внутри, и он работает нормально. Итак, должно быть что-то о том, что сервер, с которым я пытаюсь подключиться, не работает.