2012-01-12 2 views
8

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

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

Любая помощь предоставляется!

+0

Run, команда ls получить выход? – Wrikken

ответ

29

Вы можете использовать ssh2_sftp и opendir, как это:

<?php 
$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"; 
} 
+2

Есть ли способ определить, есть ли файл или каталог? особенно когда файл не имеет имени расширения? – 1901

+0

Ничего себе. Действительно взломать метод. Кроме того, вы можете использовать многие другие функции файловой системы аналогичным образом, например scandir, fopen, file_exists, file_get_contents. – Pascal9x

+0

Это фактически вызывает ту же ошибку сегментации в PHP 5.6. Вам действительно нужно передать ресурс '$ sftp', возвращенный' ssh2_sftp' с помощью 'intval', прежде чем конкатенировать его с чем угодно, как указано в ответе @pcs. –

1

http://www.php.net/manual/en/function.ssh2-exec.php

Вы даете ему команду ls, предполагая, что она представляет собой систему UNIX на основе (обычно бывает), в противном случае OP конкретной команды, как dir для Windows.

<?php 
$connection = ssh2_connect('shell.example.com', 22); 
ssh2_auth_password($connection, 'username', 'password'); 

$stream = ssh2_exec($connection, 'ls'); 
?> 
+4

'ls' не помогают, если вы хотите перебирать записи в каталоге. Кроме того, он не будет работать, если хост разрешает только SFTP-подтип и запрещает доступ к оболочке. – elias

+1

хорошо, не знал этого. отметил и +1 по вашему решению. –

+0

SSH-сервер может работать на окнах. В Windows нет команды ls. – Pascal9x

17

В случае, если кто-нибудь пытается получить эту работу, и вы работаете PHP 5.6.28 было недавнее обновление, которое либо создано требование или введена ошибка, при которой intval() должна использоваться в каждой функции доступа к папке/файлу SFTP:

$handle = opendir("ssh2.sftp://".intval($sftp)."/path/to/directory"); 
+0

Отсортировать код –

+0

Спасибо, вы спасли мой день! Я продолжал получать segfaults с момента обновления PHP! – Christian

+0

Почему это не самый главный ответ? – magtak

Смежные вопросы