95 votes

Comment faire du SFTP avec PHP ?

J'ai rencontré de nombreux scripts PHP pour des clients FTP web. J'ai besoin d'implémenter un client SFTP en tant qu'application web en PHP. PHP prend-il en charge le SFTP ? Je n'ai pas trouvé d'exemples. Quelqu'un peut-il m'aider ?

81voto

Gordon Points 156415

PHP dispose d'une enveloppe de flux ssh2 (désactivée par défaut), vous pouvez donc utiliser des connexions sftp avec n'importe quelle fonction qui supporte les enveloppes de flux en utilisant ssh2.sftp:// pour le protocole, par exemple

file_get_contents('ssh2.sftp://user:pass@example.com: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

D'ailleurs, il y a déjà pas mal de questions sur ce sujet :

0 votes

File_get_contents et file_put_contents fonctionnent tous les deux à merveille. Je ne savais pas qu'ils fonctionnaient avec sftp et c'est tellement plus facile que d'utiliser le truc sftp intégré. Merci !

5 votes

Même en utilisant file_get_contents(), vous avez toujours besoin de l'extension ssh2 (afaik).

0 votes

Paquets debian/ubuntu : apt install libssh2-1-dev php-ssh2

45voto

calgaryhit Points 219

Les fonctions ssh2 ne sont pas très bonnes. Difficile à utiliser et encore plus difficile à installer, leur utilisation garantira une portabilité nulle de votre code. Ma recommandation serait d'utiliser phpseclib, une implémentation SFTP purement PHP .

3 votes

@indranama pouvez-vous marquer cette réponse comme étant la bonne afin que les futurs utilisateurs n'aient pas à lire les commentaires pour trouver ce qui a le mieux fonctionné pour vous ?

1 votes

Phpseclib n'est pas plus facile à installer, c'est juste mon expérience.

32voto

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

Pour mettre le fichier sur le serveur, il suffit d'appeler (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);

3 votes

2 votes

Pouvez-vous mettre à jour votre réponse pour phpseclib 2.0 ? Votre exemple actuel est obsolète.

-1voto

DaveyBoy Points 1677

Je me suis défilé et j'ai écrit une classe qui crée un fichier batch et appelle ensuite sftp via un system appel. Ce n'est pas la façon la plus agréable (ou la plus rapide) de procéder, mais elle répond à mes besoins et ne nécessite pas l'installation de bibliothèques ou d'extensions supplémentaires en PHP.

C'est peut-être la solution si vous ne voulez pas utiliser l'outil de gestion de l'eau. ssh2 extensions

0 votes

-2voto

Bartosz Pachołek Points 146

Si vous pouvez utiliser l'extension ssh2 pour PHP, je vous suggère de vérifier ceci :

idct SFTP client sur GitHub

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X