Question

Je suis en train de construire une application web qui, en plus d'autres choses, besoin de se connecter à un serveur FTP pour télécharger ou télécharger des fichiers. L'application est écrit en PHP et il est hébergé sur un serveur Linux.

Ce que je me demandais si oui ou non il serait possible de fournir également un soutien pour les serveurs SFTP, mais après quelques recherches rapides sur Google, il semble que ce n'est pas si simple que cela.

Alors, la question est: Quelle serait la meilleure façon d'utiliser SFTP à partir de PHP? Y at-il une classe qui pourrait aussi fournir un soutien FTP et SFTP pour que les mêmes fonctions pourraient être utilisées à la fois?

Était-ce utile?

La solution

Oui, vous pouvez le faire avec cURL . Pour passer de FTP à SFTP tout ce que vous devez faire est de changer de forme d'option protocole CURLPROTO_FTP à CURLPROTO_SFTP.

cURL supporte les protocoles suivants: HTTP, HTTPS, FTP, FTPS, SCP, SFTP, TELNET, LDAP, LDAPS, DICT, FILE, TFTP.

BTW. SFTP est à ne pas confondre avec FTPS. SFTP est un protocole de transfert de fichiers SSH, alors que FTPS est FTP sur SSL.

Autres conseils

si vous n'avez pas installé cURL (mon hôte ne), vous pouvez utiliser phpseclib:

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

Dans le cas où une personne de fin sur cette page.

Vous pouvez également utiliser le PHP bindings pour libssh2 avec PHP. Il doit être correctement installé sur le système.

Dans Ubuntu 10.04 et Debian Lenny, bien sûr, avec toutes les dépendances

apt-get install libssh2-php

Le problème avec la recommandation d'Igor est que, entre autres choses, fait pour le code portable beaucoup moins (libssh2 est pas installé sur de très nombreux hôtes), il a une API basée POO-beaucoup plus intuitive et l'authentification RSA fait réellement sens (libssh2 vous devez stocker la clé publique et la clé séparément sur le système de fichiers privé, le fait qu'ils doivent être fournies séparément est stupide puisque la plupart des formats de clés privées sont la clé publique en leur sein) <. / p>

phpseclib est également plus rapide:

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

$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";
    }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top