Frage

Ich bin in dem Prozess eine Web-Anwendung zu bauen, das wird, neben anderen Dingen, muß auf einen FTP-Server verbinden, um Dateien herunter- oder hochladen. Die Anwendung ist in PHP geschrieben und es wird auf einem Linux-Server gehostet werden.

Was ich frage mich, ist, ob es möglich wäre, auch für SFTP-Servern zu unterstützen, aber nach ein paar schnelle Suche auf Google scheint es, dass dies nicht alles ist so einfach.

So ist die Frage: Was ist der beste Weg, SFTP zu verwenden, aus PHP sei? Gibt es eine Klasse, die auch die Unterstützung für FTP sowie SFTP, so dass gleiche Funktionen verwendet werden könnte für beide liefern könnte?

War es hilfreich?

Lösung

Ja, Sie können das tun mit cURL . Um von FTP zu schalten alle SFTP Sie tun müssen, ist zu Protokoll Option Form CURLPROTO_FTP ändern CURLPROTO_SFTP.

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

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

Andere Tipps

Wenn Sie nicht cURL installiert haben (meine Gastgeber nicht), können Sie phpseclib verwenden:

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

Falls jemand Ende-up auf dieser Seite.

Sie können auch die PHP Bindings für libssh2 mit PHP. Es sollte auf dem System entsprechend installiert werden.

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

apt-get install libssh2-php

Das Problem mit Igor Empfehlung ist, dass es unter anderem, für viel weniger portablen Code macht (libssh2 nicht installiert ist auf sehr viele Hosts), hat es eine viel intuitive OOP-basierte API und RSA-Authentifizierung macht tatsächlich Sinn (libssh2 erfordert Sie speichern den öffentlichen Schlüssel und den privaten Schlüssel getrennt auf dem Dateisystem, die Tatsache, dass sie separat zur Verfügung gestellt werden dumm ist, da die meisten privaten Schlüssel Formate sind den öffentlichen Schlüssel in ihnen) <. / p>

phpseclib ist auch schneller:

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";
    }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top