我正在用 PHP 编写一个简单的 SFTP 客户端,因为我们需要通过 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 扩展与 SFTP 一起使用?我在这里遗漏了一些明显的东西吗?
更新:
我在内部的另一台机器上设置了 sftp,它工作得很好。因此,我尝试连接的服务器一定有一些东西无法正常工作。