Heim >Backend-Entwicklung >PHP-Tutorial >PHP+SFTP implementiert das Hoch- und Herunterladen von Dateien

PHP+SFTP implementiert das Hoch- und Herunterladen von Dateien

零到壹度
零到壹度Original
2018-04-11 18:03:124776Durchsuche

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 = &#39;D:\down&#39;.time().&#39;.txt&#39;;
·$opts = array(
·&#39;http&#39;=>array(
·&#39;method&#39;=>"GET",
·&#39;timeout&#39;=>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 &#39;download failed&#39;;
·//}
·//--------------------------------------------------------------------------------------------------------------
·//上传文件
·//1
·//file_put_contents("ssh2.sftp://{$resSFTP}/var/testfile/456.txt", &#39;D:/ab.txt&#39;);
·//2也可以用copy()
·if(!copy("d:/ab.txt", "ssh2.sftp://{$resSFTP}/var/testfile/up".time().".txt")) {
·echo &#39;upload failed&#39;;
·}
·} 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

"ssh2.sftp://{$resSFTP}/var/testfile/abc.txt"

und es wird ein Fehler gemeldet, der darauf hinweist, dass diese Adresse falsch ist. Schauen Sie sich abschließend den Upload an. Der Download-Adresse muss kein

sh2.sftp://{$resSFTP}

vorangestellt werden Pfad direkt.

Die zum Hochladen verwendeten Funktionen können nicht verwendet werden. Die oben genannten Funktionen

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!

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