Pregunta

Estoy en el proceso de construcción de una aplicación web que, además de otras cosas, la necesidad de conectarse a un servidor FTP para descargar o cargar archivos. La aplicación está escrita en PHP y está alojado en un servidor Linux.

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

Entonces, la pregunta es: ¿Cuál sería la mejor manera de utilizar SFTP desde dentro de PHP? ¿Hay una clase que también podría proporcionar soporte para FTP, así como SFTP para que mismas funciones podrían ser utilizados para ambos?

¿Fue útil?

Solución

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

cURL soporta siguientes protocolos: HTTP, HTTPS, FTP, FTPS, SCP, SFTP, Telnet, LDAP, LDAPS, DICT, FILE, TFTP.

Por cierto. SFTP no se debe confundir con FTPS. SFTP es SSH File Transfer Protocol, mientras que FTPS es FTP sobre SSL.

Otros consejos

Si no tiene instalado el enrollamiento (mi anfitrión no), puede utilizar phpseclib:

http://phpseclib.sourceforge.net/documentation/net.html#net_sftp

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

También puede utilizar el href="http://php.net/manual/en/book.ssh2.php" rel="nofollow"> PHP enlaces para libssh2

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

apt-get install libssh2-php
$dataFile      = 'PASTE_FILE_NAME_HERE';
$sftpServer    = 'PASTE_SFTP_SERVER_NAME_HERE';
$sftpUsername  = 'PASTE_USERNAME_HERE';
$sftpPassword  = 'PASTE_PASSWORD_HERE';
$sftpPort      = 'PASTE_PORT_HERE';
$sftpRemoteDir = '/';

$ch = curl_init('sftp://' . $sftpServer . ':' . $sftpPort . $sftpRemoteDir . '/' . basename($dataFile));

$fh = fopen($dataFile, 'r');

if ($fh) {
    curl_setopt($ch, CURLOPT_USERPWD, $sftpUsername . ':' . $sftpPassword);
    curl_setopt($ch, CURLOPT_UPLOAD, true);
    curl_setopt($ch, CURLOPT_PROTOCOLS, CURLPROTO_SFTP);
    curl_setopt($ch, CURLOPT_INFILE, $fh);
    curl_setopt($ch, CURLOPT_INFILESIZE, filesize($dataFile));
    curl_setopt($ch, CURLOPT_VERBOSE, true);

    $verbose = fopen('php://temp', 'w+');
    curl_setopt($ch, CURLOPT_STDERR, $verbose);

    $response = curl_exec($ch);
    $error = curl_error($ch);
    curl_close($ch);

    if ($response) {
        echo "Success";
    } else {
        echo "Failure";
        rewind($verbose);
        $verboseLog = stream_get_contents($verbose);
        echo "Verbose information:\n" . $verboseLog . "\n";
    }
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top