2012-01-12 68 views

Respuesta

29

Puede utilizar ssh2_sftp y opendir, así:

<?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

¿Hay alguna forma de identificar si es un archivo o un directorio? especialmente cuando un archivo no tiene nombre de extensión? – 1901

+0

Wow. Realmente hackear el método. Además, puede usar muchas otras funciones del sistema de archivos de forma similar, por ejemplo, scandir, fopen, file_exists, file_get_contents. – Pascal9x

+0

Esto arroja el mismo error de segmentación bajo PHP 5.6. Realmente necesita pasar el recurso '$ sftp' devuelto por' ssh2_sftp' a través de un 'intval' primero, antes de concatenarlo con cualquier cosa, como lo indica la respuesta de @pcs '. –

1

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

Se le da el comando ls, asumiendo que es un sistema basado en UNIX (suele ser el caso), de lo contrario el comando OP-específico como dir para Windows.

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

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

'ls' no ayuda si desea recorrer las entradas del directorio. Además, no funcionará si el host solo permite el subsistema SFTP y niega el acceso al shell. – elias

+1

bien, no lo sabía. observado y +1 en su solución. –

+0

El servidor SSH puede funcionar en Windows. Windows no tiene un comando ls. – Pascal9x

17

En caso de que alguien está luchando para conseguir que esto funcione, y está ejecutando PHP 5.6.28 hubo una actualización reciente que sea creado un requisito o introdujo un error por el que intval() debe ser utilizado en cada función de acceso de carpeta/archivo SFTP:

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

Formatee el código –

+0

Gracias, me salvaste el día! ¡Seguí recibiendo segfaults desde esa actualización de PHP! – Christian

+0

¿Por qué esta no es la mejor respuesta? – magtak

Cuestiones relacionadas