Téléchargement de fichiers avec SFTP

J'ai téléchargé avec succès des fichiers sur ftp, mais je dois maintenant le faire via SFTP. Je peux me connecter avec succès au serveur distant, créer un fichier et y écrire, mais je ne peux pas télécharger un fichier existant de mon serveur local sur le serveur distant. Ftp_put ne se déclenche-t-il pas avec une connexion sftp?

Mon code utilisé pour écrire un fichier:

//Send file via sftp to server

$strServer = "*****";
$strServerPort = "****";
$strServerUsername = "*****";
$strServerPassword = "*****";
$csv_filename = "Test_File.csv";

//connect to server
$resConnection = ssh2_connect($strServer, $strServerPort);

if(ssh2_auth_password($resConnection, $strServerUsername, $strServerPassword)){
    //Initialize SFTP subsystem

    echo "connected";
    $resSFTP = ssh2_sftp($resConnection);    

    $resFile = fopen("ssh2.sftp://{$resSFTP}/".$csv_filename, 'w');
    fwrite($resFile, "Testing");
    fclose($resFile);                   

}else{
    echo "Unable to authenticate on server";
}

Quelqu'un a-t-il réussi à saisir un fichier local et à le télécharger via une méthode telle que ci-dessus avec sftp? Un exemple serait grandement apprécier.

Merci

28
demandé sur Erik Ekman 2012-03-05 23:00:23

5 réponses

Avec la méthode ci-dessus (impliquant sftp), vous pouvez utiliser stream_copy_to_stream:

$resFile = fopen("ssh2.sftp://{$resSFTP}/".$csv_filename, 'w');
$srcFile = fopen("/home/myusername/".$csv_filename, 'r');
$writtenBytes = stream_copy_to_stream($srcFile, $resFile);
fclose($resFile);
fclose($srcFile);

, Vous pouvez également essayer d'utiliser ssh2_scp_send

39
répondu dev-null-dweller 2012-03-05 19:35:27

Personnellement, je préfère éviter L'extension PECL SSH2. Mon approche préférée implique phpseclib, une implémentation PHP SFTP pure . par exemple.

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

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

$sftp->put('remote.ext', 'local.ext', NET_SFTP_LOCAL_FILE);
?>

Une des grandes choses que j'aime à propos de phpseclib sur L'extension PECL est qu'il est portable. Peut - être que L'extension PECL fonctionne sur une version de Linux mais pas une autre. Et sur les hôtes partagés, cela ne fonctionne presque jamais car il n'est presque jamais installé.

Phpseclib est aussi, étonnamment, plus rapide . Et si vous avez besoin d' confirmation que le fichier téléchargé vous pouvez utiliser la journalisation intégrée de phpseclib comme preuve.

20
répondu neubert 2012-03-06 05:29:43

Pour moi cela a fonctionné:

$connection = ssh2_connect($server, $serverPort);

if(ssh2_auth_password($connection, $serverUser, $serverPassword)){
    echo "connected\n";
    ssh2_scp_send($connection, "/path/to/local/".$file, "/path/to/remote/".$file);
    echo "done\n";
} else {
    echo "connection failed\n";
}

J'ai dû d'abord installer libssh2-php:

sudo apt-get install libssh2-php
10
répondu Matthias 2015-01-07 13:51:00

Pour un Document simple de phpseclib, une implémentation PHP SFTP pure .

Se Référer Lien Suivant:

Télécharger des fichiers sur SFTP en utilisant PHP

Structure Du Dossier:

Main Folder->
    my-files(Contain File Which Transfer To Remote Server)
    phpseclib0.3.0
    sftp.php
3
répondu Sandesh 2014-09-03 06:06:18

Partage d'autres entrées, trouvé ssh2_scp_send ne copiait pas correctement (octets étaient différents) lorsque la copie du fichier de Linux (64 bits) à Windows (32 bits), il SFTP routine a fonctionné parfaitement. Lorsque vous utilisez Windows avec stfp, le chemin en cas de C:\to\path doit être mis comme ssh2.sftp://{$resSFTP}/cygdrive/c / to / path si Cygwin est utilisé pour SSH sur la boîte Windows.

1
répondu pradosh nair 2013-10-01 09:45:26