Heim > Artikel > Backend-Entwicklung > So implementieren Sie den SFTP-Upload in PHP
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.
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!