2011-01-14 10 views
58

Ich bin auf viele PHP-Skripte für Web-FTP-Clients gestoßen. Ich muss einen SFTP-Client als Webanwendung in PHP implementieren. Unterstützt PHP fot SFTP? Ich konnte keine Samples finden. Kann mir jemand dabei helfen?Wie SFTP mit PHP?

Antwort

57

PHP hat ssh2 stream wrappers (standardmäßig deaktiviert), so dass Sie sftp-Verbindungen mit jeder Funktion verwenden können, die Stream-Wrapper unterstützt, indem Sie ssh2.sftp:// für das Protokoll verwenden, z.

file_get_contents('ssh2.sftp://user:[email protected]:22/path/to/filename'); 

oder - wenn auch mit ssh2 extension

$connection = ssh2_connect('shell.example.com', 22); 
ssh2_auth_password($connection, 'username', 'password'); 
$sftp = ssh2_sftp($connection); 
$stream = fopen("ssh2.sftp://$sftp/path/to/file", 'r'); 

Siehe http://php.net/manual/en/wrappers.ssh2.php

Auf einer Seite zur Kenntnis, gibt es auch eine ganze Reihe von Fragen zu diesem Thema bereits:

+0

file_get_contents und file_put_contents funktionieren beide super. Ich wusste nie, dass sie mit SFTP gearbeitet haben und es ist so viel einfacher als mit den eingebauten SFTP-Sachen. Vielen Dank! – jbrahy

+0

Auch wenn Sie file_get_contents() verwenden, benötigen Sie immer noch die Erweiterung ssh2 (afaik). – StanE

31

Die ssh2-Funktionen sind nicht sehr gut. Sie sind schwer zu benutzen und noch schwerer zu installieren. Die Verwendung garantiert Ihnen, dass Ihr Code keine Portabilität hat. Meine Empfehlung wäre, phpseclib, a pure PHP SFTP implementation zu verwenden.

+0

unterstützt nur SFTP v3 – Blacksonic

+0

@indranama würden Sie dies als die richtige Antwort markieren, so dass zukünftige Benutzer nicht Kommentare lesen müssen, um herauszufinden, welche für Sie am besten funktioniert? –

0

Ich führte einen Full-on-Cop-Out durch und schrieb eine Klasse, die eine Batch-Datei erstellt und dann sftp über einen system Aufruf aufruft. Nicht die beste (oder schnellste) Art, es zu tun, aber es funktioniert für das, was ich brauche, und es erforderte keine Installation zusätzlicher Bibliotheken oder Erweiterungen in PHP.

könnte den Weg zu gehen, wenn Sie die ssh2 Erweiterungen

+0

verwandten Thread, der mir geholfen hat: https://groups.google.com/forum/#!topic/comp.security.ssh/_55TdDdUTCw – Quamis

22

fand ich nicht benutzen wollen, dass „phpseclib“ sollten Sie mit diesem (SFTP und viele weitere Features) helfen. http://phpseclib.sourceforge.net/

Um die Datei auf dem Server Legen Sie, rufen Sie einfach (Code-Beispiel aus http://phpseclib.sourceforge.net/sftp/examples.html#put)

<?php 
include('Net/SFTP.php'); 

$sftp = new Net_SFTP('www.domain.tld'); 
if (!$sftp->login('username', 'password')) { 
    exit('Login Failed'); 
} 

// puts a three-byte file named filename.remote on the SFTP server 
$sftp->put('filename.remote', 'xxx'); 
// puts an x-byte file named filename.remote on the SFTP server, 
// where x is the size of filename.local 
$sftp->put('filename.remote', 'filename.local', NET_SFTP_LOCAL_FILE); 
+0

Die Git-Repo ist hier: https://github.com/phpseclib/phpseclib/tree/master/phpseclib – relipse

-1

Monsta FTP bietet SFTP/SCP sowie normales FTP über einen webbasierten Client, der kostenlos heruntergeladen werden kann. (Disclaimer: Ich bin an diesem Projekt beteiligt)

+0

wie verhält sich das? Ist Monsta eine PHP-Bibliothek für Entwickler? – Brian