使用 phpseclib 下载文件匹配模式
Downloading file matching pattern using phpseclib
我正在尝试从 SFTP 服务器下载文件。我已经设法连接到它并下载了文件。问题是服务器中的文件会每天更新,文件名的一部分是它生成的确切时间,这是不可预测的。
我如何实现我的 PHP 脚本,以便它下载名称以特定模式开头但我不知道确切全名的任何 XML 文件?
您必须使用 Net_SFTP::nlist
检索远程目录中所有文件的列表。
然后迭代列表,找到符合您要求的文件名。
然后您使用 Net_SFTP::get
下载所选文件。
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);
}
正则表达式(缩写为regex或regexp,有时也称为有理表达式)是形成搜索模式的字符序列,主要用于与字符串的模式匹配,或字符串匹配,即"find and replace"-like 操作,非常适合您的需要。以下是有关正则表达式的更多背景知识:http://en.m.wikipedia.org/wiki/Regular_expression
供您测试:http://www.phpliveregex.com
这是一个例子:
http://php.net/manual/en/function.preg-match.php
<?php
$subject = "abcdef";
$pattern = '/^def/';
preg_match($pattern, substr($subject,3), $matches, PREG_OFFSET_CAPTURE);
print_r($matches);
?>
我正在尝试从 SFTP 服务器下载文件。我已经设法连接到它并下载了文件。问题是服务器中的文件会每天更新,文件名的一部分是它生成的确切时间,这是不可预测的。
我如何实现我的 PHP 脚本,以便它下载名称以特定模式开头但我不知道确切全名的任何 XML 文件?
您必须使用 Net_SFTP::nlist
检索远程目录中所有文件的列表。
然后迭代列表,找到符合您要求的文件名。
然后您使用 Net_SFTP::get
下载所选文件。
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);
}
正则表达式(缩写为regex或regexp,有时也称为有理表达式)是形成搜索模式的字符序列,主要用于与字符串的模式匹配,或字符串匹配,即"find and replace"-like 操作,非常适合您的需要。以下是有关正则表达式的更多背景知识:http://en.m.wikipedia.org/wiki/Regular_expression
供您测试:http://www.phpliveregex.com
这是一个例子: http://php.net/manual/en/function.preg-match.php
<?php
$subject = "abcdef";
$pattern = '/^def/';
preg_match($pattern, substr($subject,3), $matches, PREG_OFFSET_CAPTURE);
print_r($matches);
?>