Heim  >  Artikel  >  Backend-Entwicklung  >  So implementieren Sie den SFTP-Upload in PHP

So implementieren Sie den SFTP-Upload in PHP

藏色散人
藏色散人Original
2021-09-14 10:57:302714Durchsuche

So implementieren Sie den SFTP-Upload in PHP: 1. Erstellen Sie den Code „class SFTPConnection private $connection...try{...}catch{...}“ 2. Führen Sie den Befehl „sftp -oPort=port user@“ aus. server"-Anweisung Das ist es.

So implementieren Sie den SFTP-Upload in PHP

Die Betriebsumgebung dieses Artikels: Windows 7-System, PHP-Version 7.1, DELL G3-Computer

Wie implementiert man den SFTP-Upload mit PHP?

php implementiert das Hochladen von SFTP-Dateien

php implementiert das Hochladen von SFTP-Dateien mithilfe der Methode auf der offiziellen Website von php.net. Der Code lautet wie folgt:

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";
}

Aber ich bin während des Vorgangs auf ein Problem gestoßen, meine PHP-Version ist PHP 5.6 .31 (cli) (erstellt: 2. August 2017 15:05:23) , wenn

$stream = @fopen("ssh2.sftp://$sftp$remote_file", 'w');

fopen ausgeführt wird, meldet die Ausführungsdatei einen „Segmentierungsfehler“, und dann kann die folgende Methode verwendet werden, um ihn zu beheben

$stream = @fopen("ssh2.sftp://" . intval($sftp) . $remote_file, 'w');

Unter anderem habe ich bei der Implementierung des SFTP-Uploads nicht auf den Unterschied zwischen hochgeladenen Dateien und Upload-Verzeichnissen geachtet (zum Beispiel: Probleme mit /upload und /upload/test.txt), was dazu führte, dass fopen(): Unable Um ssh2.sftp zu öffnen, wird jedes Mal gemeldet, wenn PHP ausgeführt wird: //5/upload auf dem Remote-Host. Die Lösung für das Problem ist schwerwiegend, groß geschrieben

Das Obige wird von PHP erledigt, melden Sie sich einfach beim SFTP-Server an Um dies zu überprüfen, erfahren Sie das Ergebnis.

sftp-Befehls-Anmeldemethode:

sftp -oPort =Port Benutzer@Server Geben Sie dann das Passwort ein. Nach der Eingabe können Sie in das entsprechende Verzeichnis gehen, um zu überprüfen, ob die Datei vorhanden ist.

Empfohlenes Lernen: „PHP-Video-Tutorial

Das obige ist der detaillierte Inhalt vonSo implementieren Sie den SFTP-Upload in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn