2009-04-04 13 views
15

Je suis en train de construire une application web qui, en plus d'autres choses, doit se connecter à un serveur FTP pour télécharger ou télécharger des fichiers. L'application est écrite en PHP et hébergée sur un serveur Linux. Ce que je me demandais, c'est si oui ou non il serait possible de fournir également un support pour les serveurs SFTP, mais après quelques recherches rapides sur Google, il semble que ce ne soit pas si simple. Donc, la question est: Quelle serait la meilleure façon d'utiliser SFTP à partir de PHP? Y a-t-il une classe qui pourrait également fournir un support pour FTP ainsi que SFTP afin que les mêmes fonctions puissent être utilisées pour les deux?SFTP à partir de PHP

Répondre

14

Oui, vous pouvez le faire avec cURL. Pour passer de FTP à SFTP tout ce que vous avez à faire est de changer le formulaire d'option de protocole CURLPROTO_FTP à CURLPROTO_SFTP. CURL prend en charge les protocoles suivants: HTTP, HTTPS, FTP, FTPS, SCP, SFTP, TELNET, LDAP, LDAPS, DICT, FICHIER, TFTP.

BTW. SFTP ne doit pas être confondu avec FTPS. SFTP est le protocole de transfert de fichiers SSH, tandis que FTPS est FTP sur SSL.

+0

En fait, vous ne même pas besoin de jouer avec 'CURLOPT_PROTOCOLS'. Vous pouvez simplement mettre 'sftp: //' devant le nom d'hôte que vous passez avec 'CURLOPT_URL' et cURL détectera automatiquement et utilisera SFTP. – sakatc

4

au cas où quelqu'un bout sur cette page.

Vous pouvez également utiliser le PHP Bindings for LIBSSH2 avec PHP. Il devrait ê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 
3

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 très Beaucoup d'hôtes), il a une API OOP bien plus intuitive et l'authentification RSA a du sens (libssh2 vous oblige à stocker la clé publique et la clé privée séparément sur le système de fichiers, le fait qu'ils doivent être fournis séparément est idiot puisque la plupart des formats de clés privées incluent la clé publique).

phpseclib est également plus rapide:

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