Я пытаюсь загрузить файл с 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); }
в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: 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); ?>