php sftp获取以前缀开头的文件

时间:2018-09-13 10:21:16

标签: php file ssh sftp

我想列出其他服务器中目录中所有以前缀开头的文件

我使用ssh2_connect函数连接到另一台服务器,连接进行得很顺利,我能够提取所有文件,但是我不确定如何仅从目录中提取所需的文件。

例如:说我需要以TP00 *开始的文件。* 由于某些原因,glob()无法与sftp一起使用。

我的代码如下

$connection = ssh2_connect('shell.example.com', 22);
ssh2_auth_password($connection, 'username', 'password');

$sftp = ssh2_sftp($connection);
$sftp_fd = intval($sftp);

$handle = opendir("ssh2.sftp://$sftp_fd/path/to/directory");
echo "Directory handle: $handle\n";
echo "Entries:\n";
while (false != ($entry = readdir($handle))){
    echo "$entry\n";
}

需要任何帮助!

其他信息: 我给的文件名只是一个例子。并非总是从TP00开始。我需要动态地匹配它,这取决于随机生成的IDS,例如TP00,W0D0,YAL0等(没有特定的模式,但是我可以获得前缀)。

我对glob()尝试的操作如下

$files = glob("ssh2.sftp://$sftp_fd/path/to/directory/TP00*.*");

这没有返回任何文件。并且不会引发任何错误。所以不确定为什么它不起作用。

尝试做的是获取匹配文件的数组,而不会遍历整个文件,因为该文件夹包含太多文件。

1 个答案:

答案 0 :(得分:0)

您可以为此使用正则表达式: TP00.*?\..*?$

用法示例:

if (preg_match('/TP00.*?\..*?$/i', $entry)){
    // $entry is in the right format
}

可以在这里找到另一种可能的解决方案作为答案What file operations are available with ssh2:// in PHP