2009-04-04 11 views
15

Ich bin dabei, eine Webanwendung zu erstellen, die, neben anderen Dingen, eine Verbindung zu einem FTP-Server herstellen muss, um Dateien herunterzuladen oder hochzuladen. Die Anwendung ist in PHP geschrieben und wird auf einem Linux-Server gehostet.SFTP von innerhalb von PHP

Ich frage mich, ob es möglich wäre, auch SFTP-Server zu unterstützen, aber nach ein paar kurzen Suchen auf Google scheint es, dass dies nicht so einfach ist.

Also, die Frage ist: Was wäre der beste Weg, um SFTP aus PHP zu verwenden? Gibt es eine Klasse, die sowohl FTP als auch SFTP unterstützen könnte, so dass für beide die gleichen Funktionen genutzt werden könnten?

Antwort

14

Ja, Sie können das mit cURL tun. Um von FTP zu SFTP zu wechseln, müssen Sie lediglich das Protokolloptionsformular CURLPROTO_FTP zu CURLPROTO_SFTP ändern.

cURL unterstützt folgende Protokolle: HTTP, HTTPS, FTP, FTPS, SCP, SFTP, TELNET, LDAP, LDAPS, DICT, DATEI, TFTP.

BTW. SFTP ist nicht mit FTPS zu verwechseln. SFTP ist SSH File Transfer Protocol, während FTPS FTP über SSL ist.

+0

Eigentlich haben Sie nicht einmal mit 'CURLOPT_PROTOCOLS' zu verwirren müssen. Sie können einfach 'sftp: //' an den Anfang des Hostnamens setzen, den Sie mit 'CURLOPT_URL' übergeben, und cURL wird SFTP automatisch erkennen und verwenden. – sakatc

4

Falls jemand Ende-up auf dieser Seite.

Sie können auch die PHP Bindings for LIBSSH2 mit PHP verwenden. Es sollte auf dem System entsprechend installiert sein.

In Ubuntu 10.04 und Debian Lenny, natürlich mit allen

apt-get install libssh2-php 
3

Das Problem mit Igor Empfehlung abhängigkeit ist, dass es unter anderem, für viel weniger portablen Code macht (libssh2 ist sehr nicht installiert (viele Hosts), es hat eine viel intuitivere OOP-basierte API und RSA-Authentifizierung macht tatsächlich Sinn (libssh2 erfordert, dass Sie den öffentlichen Schlüssel und den privaten Schlüssel separat im Dateisystem speichern; die Tatsache, dass sie separat bereitgestellt werden müssen, ist seither albern die meisten privaten Schlüsselformate enthalten den öffentlichen Schlüssel in ihnen).

phpseclib ist auch schneller:

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

Verwandte Themen