Maison >développement back-end >Problème PHP >Comment implémenter le téléchargement SFTP en PHP
Comment implémenter le téléchargement sftp en PHP : 1. Créez le code "class SFTPConnection private $connection...try{...}catch{...}" 2. Exécutez le "sftp -oPort=port user@ déclaration du serveur" C'est tout.
L'environnement d'exploitation de cet article : système Windows 7, PHP version 7.1, ordinateur DELL G3
Comment implémenter le téléchargement sftp avec PHP ?
php implémente le téléchargement de fichiers SFTP
php implémente le téléchargement de fichiers sftp en utilisant la méthode sur le site officiel de php.net Le code est le suivant :
class SFTPConnection { private $connection; private $sftp; public function __construct($host, $port=22) { $this->connection = @ssh2_connect($host, $port); if (! $this->connection) throw new Exception("Could not connect to $host on port $port."); } public function login($username, $password) { if (! @ssh2_auth_password($this->connection, $username, $password)) throw new Exception("Could not authenticate with username $username " . "and password $password."); $this->sftp = @ssh2_sftp($this->connection); if (! $this->sftp) throw new Exception("Could not initialize SFTP subsystem."); } public function uploadFile($local_file, $remote_file) { $sftp = $this->sftp; $stream = @fopen("ssh2.sftp://$sftp$remote_file", 'w'); if (! $stream) throw new Exception("Could not open file: $remote_file"); $data_to_send = @file_get_contents($local_file); if ($data_to_send === false) throw new Exception("Could not open local file: $local_file."); if (@fwrite($stream, $data_to_send) === false) throw new Exception("Could not send data from file: $local_file."); @fclose($stream); } } try { $sftp = new SFTPConnection("localhost", 22); $sftp->login("username", "password"); $sftp->uploadFile("/tmp/to_be_sent", "/tmp/to_be_received"); } catch (Exception $e) { echo $e->getMessage() . "\n"; }
Mais j'ai rencontré un problème pendant le processus. PHP 5.6 .31 (cli) (construit : 2 août 2017 15:05:23), lors de l'exécution de
$stream = @fopen("ssh2.sftp://$sftp$remote_file", 'w');
fopen, le fichier d'exécution signalera une erreur "Défaut de segmentation", puis la méthode suivante peut être utilisée pour la résoudre
$stream = @fopen("ssh2.sftp://" . intval($sftp) . $remote_file, 'w');
Parmi eux, lors de l'implémentation du téléchargement sftp, je n'ai pas fait attention à la différence entre les fichiers téléchargés et les répertoires de téléchargement (par exemple : problèmes avec /upload et /upload/test.txt), ce qui a abouti à fopen() : impossible pour ouvrir ssh2.sftp, il est signalé à chaque fois que php est exécuté : //5/upload sur l'hôte distant. La solution au problème est sérieux, en majuscule
Ce qui précède est effectué par php, connectez-vous simplement au serveur sftp. pour vérifier et vous connaîtrez le résultat.
méthode de connexion par commande sftp :
sftp -oPort =port user@server Entrez ensuite le mot de passe Après avoir entré, vous pouvez accéder au répertoire relatif pour vérifier si le fichier existe.
. Apprentissage recommandé : "Tutoriel vidéo PHP"
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!