Heim >Backend-Entwicklung >PHP-Tutorial >PHP+SFTP implementiert das Hoch- und Herunterladen von Dateien
Der Inhalt dieses Artikels besteht darin, den von PHP + SFTP implementierten Datei-Upload und -Download mitzuteilen. Er hat einen gewissen Referenzwert.
Kürzlich entwickelte Projekte zur Zusammenarbeit mit Banken erfordern das Hoch- und Herunterladen von Dateien. Es gibt bestimmte Anforderungen an die Vertraulichkeit von Dateien, daher wird SFTP verwendet. Bei der tatsächlichen Entwicklung sind wir jedoch auf viele Probleme gestoßen. Die online gefundenen Tutorials und Fälle konnten nicht verwendet werden und wurden immer wieder kopiert. Nach ständigem Debuggen wurde schließlich der Datei-Upload und -Download von PHP realisiert. Es wird jetzt nur zu Referenzzwecken aufgezeichnet.
1. Überprüfen Sie die PHP-Version und laden Sie die entsprechende ssh2-Erweiterung herunter: https://windows.php.net/downloads/pecl/releases/ssh2/. Für eine spezifische Installation suchen Sie bitte online. phpinfo() prüft, ob es installiert ist. Nach erfolgreicher Installation können Sie ssh2 sehen.
2. Die im Internet bereitgestellten Upload- und Download-Methoden (ich glaube, Sie müssen sie gesehen haben)
<·?·php //php环境中必须有ssh ·$strServer = "服务器ip";//服务器ip ·$strServerPort = "22";//端口号 ·$strServerUsername = "***";//用户名 ·$strServerPassword = "***";//密码 ·//connect to server ·$resConnection = ssh2_connect($strServer, $strServerPort); ·if(ssh2_auth_password($resConnection, $strServerUsername, $strServerPassword)){ ·//初始化 SFTP ·$resSFTP = ssh2_sftp($resConnection); ·echo $resSFTP; ·//下载文件 ·//1 ·$filename = 'D:\down'.time().'.txt'; ·$opts = array( ·'http'=>array( ·'method'=>"GET", ·'timeout'=>60, ·) ·); ·$context = stream_context_create($opts); ·$strData = ·file_get_contents("ssh2.sftp://{$resSFTP}/var/testfile/abc.txt", false, $context); ·file_put_contents($filename, $strData); ·//2 也可以用copy() ·//if(!copy("ssh2.sftp://{$resSFTP}/dfr508/WUN/ikea-logo.jpg", $filename)) { ·// echo 'download failed'; ·//} ·//-------------------------------------------------------------------------------------------------------------- ·//上传文件 ·//1 ·//file_put_contents("ssh2.sftp://{$resSFTP}/var/testfile/456.txt", 'D:/ab.txt'); ·//2也可以用copy() ·if(!copy("d:/ab.txt", "ssh2.sftp://{$resSFTP}/var/testfile/up".time().".txt")) { ·echo 'upload failed'; ·} ·} else { ·echo "无法在服务器进行身份验证"; ·} ·?·>Aber Den Online-Tutorials zufolge konnte ich es nicht erreichen, also musste ich die Ursache Schritt für Schritt herausfinden.
$strServer = "";//服务器ip $strServerPort = "";//端口号 $strServerUsername = "";//用户名 $strServerPassword = "";//密码 //1连接服务器 $resConnection = ssh2_connect($strServer, $strServerPort); //2验证连 if(ssh2_auth_password($resConnection, $strServerUsername, $strServerPassword)){ //3初始化 SFTP $resSFTP = ssh2_sftp($resConnection);Zuallererst gibt es in den ersten drei Schritten kein Problem. Verwenden Sie die Methoden copy, file_get_content und curl, um das Hoch- und Herunterladen zu implementieren, und es werden 502-Fehler gemeldet. Ich habe den Pfad und andere Probleme überprüft und es gab kein Problem, aber es gelang einfach nicht. Später wird gefolgert, dass auf die Dateiadresse auf dem SFTP-Server nicht zugegriffen werden kann.
"ssh2.sftp://{$resSFTP}/var/testfile/abc.txt"Jetzt besteht die einzige Möglichkeit darin, eine wirklich verwendbare Adresse zu finden. Nachdem ich viele Informationen überprüft habe, habe ich schließlich ssh2_sftp_realpath im PHP-Handbuch gefunden , und kehren Sie schließlich zum Zugriff zurück, nachdem Sie eine Verbindung zu SFTP hergestellt haben. Die Adresse der Datei. Übergeben Sie
copy, file_get_content, curl
müssen zum Hochladen verwendet werden ssh2_scp_send
ssh2_scp_recv Herunterladen
Das obige ist der detaillierte Inhalt vonPHP+SFTP implementiert das Hoch- und Herunterladen von Dateien. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!