Maison  >  Article  >  développement back-end  >  Comment implémenter le téléchargement SFTP en PHP

Comment implémenter le téléchargement SFTP en PHP

藏色散人
藏色散人original
2021-09-14 10:57:302742parcourir

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.

Comment implémenter le téléchargement SFTP en PHP

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn