2009-04-04 14 views
15

Estoy en el proceso de crear una aplicación web que, además de otras cosas, necesita conectarse a un servidor FTP para descargar o cargar archivos. La aplicación está escrita en PHP y está alojada en un servidor Linux.SFTP desde PHP

Lo que me preguntaba es si también sería posible proporcionar soporte para servidores SFTP, pero después de algunas búsquedas rápidas en Google parece que esto no es tan sencillo.

Entonces, la pregunta es: ¿Cuál sería la mejor manera de usar SFTP desde PHP? ¿Hay alguna clase que también pueda proporcionar soporte para FTP y SFTP para que las mismas funciones puedan ser utilizadas para ambos?

Respuesta

14

Sí, puede hacerlo con cURL. Para cambiar de FTP a SFTP, todo lo que tiene que hacer es cambiar el formulario de opción de protocolo CURLPROTO_FTP al CURLPROTO_SFTP.

cURL admite los siguientes protocolos: HTTP, HTTPS, FTP, FTPS, SCP, SFTP, TELNET, LDAP, LDAPS, DICT, ARCHIVO, TFTP.

BTW. SFTP no debe confundirse con FTPS. SFTP es el protocolo de transferencia de archivos SSH, mientras que FTPS es FTP sobre SSL.

+0

En realidad, usted ni siquiera necesita meterse con 'CURLOPT_PROTOCOLS'. Puede poner 'sftp: //' en la parte delantera del nombre de host que pasa con 'CURLOPT_URL' y cURL detectará automáticamente y usará SFTP. – sakatc

4

En caso de que alguien terminar arriba en esta página.

También puede usar el PHP Bindings for LIBSSH2 con PHP. Debe estar instalado apropiadamente en el sistema.

En Ubuntu 10.04 y Debian Lenny, por supuesto, con todas las dependencias

apt-get install libssh2-php 
3

El problema con la recomendación de Igor es que, entre otras cosas, hace que para el código mucho menos portátil (libssh2 no está instalado en muy muchos hosts), tiene una API basada en OOP mucho más intuitiva y la autenticación RSA realmente tiene sentido (libssh2 requiere que almacene la clave pública y la clave privada por separado en el sistema de archivos; el hecho de que deben proporcionarse por separado es una tontería ya que la mayoría de los formatos de clave privada incluyen la clave pública dentro de ellos).

phpseclib es también más rápido:

http://kevin.vanzonneveld.net/techblog/article/make_ssh_connections_with_php/#comment_3759