2012-10-15 1 views
1

Я переписываю функцию, которая обрабатывала и сортировала файлы на локальном сервере, с тем, который может сделать это на удаленном сервере, доступном через ssh-соединение.Какие файловые операции доступны с помощью ssh2: // в PHP

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

if ($stream = @fopen("ssh2.sftp://$sftp/$filename", "r")) { 
//do stuff... 
} 

Но я не знаю, имя файла уже. Я мастерил это работает локально с помощью

$file_path = ABSOLUTE_PATH . UPLOAD_URL . $importfolder . '/'; 
$file = '*.xml'; 
$files = glob($file_path.$file); 

Я не могу получить Glob() работает через сервер SSH

$files = glob("ssh2.sftp://$sftp/*.xml"); 

(всегда возвращается пустым, несмотря на ряд XML-файлов в каталоге (SFTP подключение к одной директории).

, как я могу добиться этого? можно ли использовать такие функции, как Glob() здесь?

ответ

1

вы могли бы просто использовать ssh2 functions ...

ie.

$session = ssh2_connect('some.server', 22); 
ssh2_auth_password($session, 'username', 'password'); 
$stream = ssh2_exec($session, 'ls -la /some/path'); 
stream_set_blocking($stream, true); 
echo "list of files: " . stream_get_contents($stream); 
+0

не был в состоянии видеть те, которые не требуют буквального FilePath быть переданы – Damon

+0

вы можете выполнять команды оболочки, чтобы найти ваши файлы, такие как 'ls' или' find | grep' и т. д. обновили ответ ... –

+0

Хорошо, спасибо за этот пример. – Damon

1

Вы можете сделать это:

<?php 
include('Net/SFTP.php'); 

$sftp = new Net_SFTP('www.domain.tld'); 
if (!$sftp->login('username', 'password')) { 
    exit('Login Failed'); 
} 

print_r($sftp->nlist()); // == $sftp->nlist('.') 
print_r($sftp->rawlist()); // == $sftp->rawlist('.') 
?> 

(использует phpseclib, a pure PHP SFTP implementation)