2011-01-14 48 views
58

He encontrado muchos scripts PHP para clientes web FTP. Necesito implementar un cliente SFTP como una aplicación web en PHP. ¿Es compatible PHP con SFTP? No pude encontrar muestras ¿Alguien puede ayudarme con esto?Cómo SFTP con PHP?

Respuesta

57

PHP tiene envolturas de secuencia ssh2 (deshabilitadas de forma predeterminada), por lo que puede usar las conexiones de sftp con cualquier función que admita el flujo de envolturas utilizando ssh2.sftp:// para el protocolo, p.

file_get_contents('ssh2.sftp://user:[email protected]:22/path/to/filename'); 

o - cuando también mediante el ssh2 extension

$connection = ssh2_connect('shell.example.com', 22); 
ssh2_auth_password($connection, 'username', 'password'); 
$sftp = ssh2_sftp($connection); 
$stream = fopen("ssh2.sftp://$sftp/path/to/file", 'r'); 

Ver http://php.net/manual/en/wrappers.ssh2.php

En una nota lateral, también hay un buen montón de preguntas acerca de este tema ya:

+0

file_get_contents y file_put_contents ambos funcionan increíble. Nunca supe que trabajaron con sftp y es mucho más fácil que usar las cosas integradas de sftp. ¡Gracias! – jbrahy

+0

Incluso cuando se utiliza file_get_contents(), aún necesita la extensión ssh2 (afaik). – StanE

31

Las funciones ssh2 no son muy buenas. Difícil de usar y aún más difícil de instalar, usarlos garantizará que su código tenga cero portabilidad. Mi recomendación sería usar phpseclib, a pure PHP SFTP implementation.

+0

solo es compatible con SFTP v3 – Blacksonic

+0

@indranama ¿Marcaría esto como la respuesta correcta para que los futuros usuarios no tengan que leer los comentarios para encontrar cuál funcionó mejor para usted? –

0

Realicé una copia de seguridad completa y escribí una clase que crea un archivo por lotes y luego llama al sftp a través de una llamada system. No es la manera más agradable (o más rápida) de hacerlo, pero funciona para lo que necesito y no requiere ninguna instalación de bibliotecas adicionales o extensiones en PHP.

podría ser el camino a seguir si usted no desea utilizar las extensiones ssh2

+0

tema relacionado que me ayudó: https://groups.google.com/forum/#!topic/comp.security.ssh/_55TdDdUTCw – Quamis

22

he encontrado que "phpseclib" debe ayudarle con esto (SFTP y muchas más características). http://phpseclib.sourceforge.net/

para poner el archivo en el servidor, simplemente llamada (código de ejemplo de http://phpseclib.sourceforge.net/sftp/examples.html#put)

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

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

// puts a three-byte file named filename.remote on the SFTP server 
$sftp->put('filename.remote', 'xxx'); 
// puts an x-byte file named filename.remote on the SFTP server, 
// where x is the size of filename.local 
$sftp->put('filename.remote', 'filename.local', NET_SFTP_LOCAL_FILE); 
+0

El informe de git está aquí: https://github.com/phpseclib/phpseclib/tree/master/phpseclib – relipse

-1

Monsta FTP ofrece SFTP/SCP, así como FTP normal a través de un cliente basado en web que se puede descargar gratis. (descargo de responsabilidad: estoy involucrado con este proyecto)

+0

¿cómo se relaciona esto? ¿Monsta es una biblioteca PHP para uso de los desarrolladores? – Brian