使用phpseclib下载文件匹配模式

使用phpseclib下载文件匹配模式,php,filenames,sftp,phpseclib,Php,Filenames,Sftp,Phpseclib,我正在尝试从SFTP服务器下载文件。我已经设法连接到它并下载了文件。问题是服务器中的文件将每天更新,文件名的一部分是生成文件的确切时间,这是不可预测的 如何实现我的PHP脚本,使其下载任何名称以特定模式开头但我不知道确切全名的XML文件?您必须使用检索远程目录中所有文件的列表 然后迭代列表,找到符合您需求的文件名 然后使用下载所选文件 正则表达式(缩写为regex或regexp,有时称为rational表达式)是一个字符序列,形成一个搜索模式,主要用于与字符串的模式匹配,或字符串匹配,即“查找和

我正在尝试从SFTP服务器下载文件。我已经设法连接到它并下载了文件。问题是服务器中的文件将每天更新,文件名的一部分是生成文件的确切时间,这是不可预测的


如何实现我的PHP脚本,使其下载任何名称以特定模式开头但我不知道确切全名的XML文件?

您必须使用检索远程目录中所有文件的列表

然后迭代列表,找到符合您需求的文件名

然后使用下载所选文件

正则表达式(缩写为regex或regexp,有时称为rational表达式)是一个字符序列,形成一个搜索模式,主要用于与字符串的模式匹配,或字符串匹配,即“查找和替换”之类的操作,非常适合您的需要。以下是有关regex的更多背景信息:

对于您的测试:

以下是一个例子:



您可以在ftp服务器上执行ls,解析出您的xml文件名并发送给下载的文件。或者,如果有很多xml文件,则使用正则表达式,因为每天都会生成一个新的xml文件,因此可能会有很多xml文件。你能给我更多关于正则表达式的提示吗?我对此不熟悉。非常感谢你!我试过在文件名中加*但是没有用,如果你有类似的意思的话,非常感谢你的回答!我也想过类似的事情,但我希望事情会很复杂,因为你的话,我看到了光明,现在它开始工作了!!
include("Net/SFTP.php");

$sftp = new Net_SFTP("host");

if (!$sftp->login("username", "password"))
{
    die("Cannot connect");
}

$path = "/remote/path";
$list = $sftp->nlist($path);

if ($list === false)
{
    die("Error listing directory ".$path);
}

$prefix = "prefix";
$matches = preg_grep("/^$prefix.*/i", $list);
if (count($matches) != 1)
{
    die("No file or more than one file matches the pattern: ".implode(",", $matches));
}

$matches = array_values($matches);
$filename = $matches[0];
$filepath = $path."/".$filename;
if (!$sftp->get($filepath, $filename))
{
    die("Error downloading file ".$filepath);
}
<?php
$subject = "abcdef";
$pattern = '/^def/';
preg_match($pattern, substr($subject,3), $matches, PREG_OFFSET_CAPTURE);
print_r($matches);
?>