使用PHP中的ssh2://协议,有哪些文件操作可用?

3

我正在重写一个处理和排序本地服务器文件的函数,以便可以通过ssh连接到达远程服务器并进行相同操作。

现有系统使用pecl ssh2库来获取特定的文件,例如:

if ($stream = @fopen("ssh2.sftp://$sftp/$filename", "r")) {
//do stuff...
}

但是我不知道文件名。 我在本地使用此方法正常工作:

$file_path =  ABSOLUTE_PATH . UPLOAD_URL . $importfolder . '/';
$file = '*.xml';
$files = glob($file_path.$file);

我无法通过ssh服务器使glob()正常工作。

$files = glob("ssh2.sftp://$sftp/*.xml");

尽管目录中有许多xml文件(sftp连接到单个目录),但始终返回空白。

我该如何实现这一点?我能在这里使用像glob()这样的函数吗?

2个回答

1
你可以这样做:
<?php
include('Net/SFTP.php');

$sftp = new Net_SFTP('www.domain.tld');
if (!$sftp->login('username', 'password')) {
    exit('Login Failed');
}

print_r($sftp->nlist()); // == $sftp->nlist('.')
print_r($sftp->rawlist()); // == $sftp->rawlist('.')
?>

(使用phpseclib,一个纯PHP SFTP实现)


1

你可以简单地使用ssh2函数...

例如:

$session = ssh2_connect('some.server', 22);
ssh2_auth_password($session, 'username', 'password');
$stream = ssh2_exec($session, 'ls -la /some/path');
stream_set_blocking($stream, true);
echo "list of files: " . stream_get_contents($stream);

没有看到任何不需要传递字面文件路径的。 - Damon
你可以执行 shell 命令来查找文件,例如 lsfind | grep 等。更新了答案... - Andreas Linden
很遗憾,看起来我没有被授权执行该操作:“无法在远程主机上请求命令执行”。 - Damon
我可以执行常规的SFTP移动功能并通过身份验证,但没有命令行访问权限。 - Damon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接