2015-05-22 2 views
0

Я пытаюсь загрузить файл с сервера SFTP. Мне удалось подключиться к нему и загрузить файлы. Проблема в том, что файл на сервере будет обновляться ежедневно, а часть имени файла - точное время, когда оно генерируется, что непредсказуемо.Загрузка шаблона сопоставления файлов с использованием phpseclib

Как я могу реализовать свой PHP-скрипт, чтобы он загружал любой файл XML, имя которого начинается с определенного шаблона, но я не знаю точное полное имя?

+0

Вы могли бы сделать Ls на сервере FTP разобрать ваше имя XML-файлов и отправьте это для загрузки. –

+0

или использовать регулярное выражение, если есть много файлов xml. –

+0

Они, вероятно, будут много XML-файла, так как каждый день создается новый. Не могли бы вы дать мне больше намеков на регулярное выражение? Я не знаком с этим. Большое спасибо! Я попытался положить * в имя файла, но он не работает, если вы имеете в виду что-то подобное – UTC

ответ

4

Вам необходимо получить список всех файлов в удаленном каталоге, используя 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); 
} 
+1

Я добавил пример кода. –

+1

Большое вам спасибо за ваш ответ! Я думал о чем-то подобном, но ожидал быть довольно сложным, с твоими словами я видел свет, и теперь он работает! – UTC

-1

Ну регулярное выражение (сокращенно регулярное выражение или регулярное выражение, а иногда называется рациональное выражение) представляет собой последовательность символов, которая формирует шаблон поиска, в основном для использования в шаблону со строками, или совпадения строк, то есть «найти и замените «подобные операции» и идеально подойдут для того, что вам нужно. Здесь больше фона на регулярное выражение: 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); 
?> 
Смежные вопросы