php sftp получает файлы, начинающиеся с префикса - PullRequest
0 голосов
/ 13 сентября 2018

Я хотел бы перечислить все файлы, начинающиеся с префикса из каталога на другом сервере

Я подключен к другому серверу с помощью функции 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 голосов
/ 13 сентября 2018

Вы можете использовать выражения Regex для этого: TP00.*?\..*?$

Пример использования:

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

Другое возможное решение можно найти здесь в качестве ответа Какие операции с файламидоступно с ssh2: // в PHP

...