web-dev-qa-db-fra.com

Comment SFTP avec PHP?

J'ai rencontré de nombreux PHP scripts pour les clients Web FTP. Je dois implémenter un client SFTP en tant qu'application Web en PHP. Est-ce que PHP prend en charge SFTP? Je n'ai trouvé aucun échantillon, est-ce que quelqu'un peut m'aider avec ça?

76
indranama

PHP a des wrappers de flux ssh2 (désactivés par défaut), vous pouvez donc utiliser les connexions sftp avec n’importe quelle fonction supportant les wrappers de flux en utilisant ssh2.sftp:// pour le protocole, par exemple.

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

ou - si vous utilisez également le extension ssh2

$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');

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

En passant, il y a déjà pas mal de questions sur ce sujet:

69
Gordon

Les fonctions ssh2 ne sont pas très bonnes. Difficile à utiliser et encore plus difficile à installer, leur utilisation garantira que votre code n’a aucune portabilité. Ma recommandation serait d'utiliser phpseclib, une pure PHP SFTP =.

37
calgaryhit

J'ai trouvé que "phpseclib" devrait vous aider avec cela (SFTP et beaucoup plus de fonctionnalités). http://phpseclib.sourceforge.net/

Pour placer le fichier sur le serveur, appelez simplement (exemple de code de 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);
27