Heim  >  Artikel  >  Backend-Entwicklung  >  PHP stellt eine Verbindung zu SFTP her, um das Hoch- und Herunterladen von Dateien zu implementieren

PHP stellt eine Verbindung zu SFTP her, um das Hoch- und Herunterladen von Dateien zu implementieren

不言
不言Original
2018-04-16 10:07:142347Durchsuche

Der Inhalt dieses Artikels handelt von der Verbindung von SFTP mit PHP, um das Hochladen und Herunterladen von Dateien zu ermöglichen. Jetzt kann ich ihn mit Ihnen teilen.

Kürzlich entwickelt Projekt zur Zusammenarbeit mit Banken Projekte 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 der einzige Weg darin, das Wahre zu finden Verfügbare Adresse. , überprüfte viele Informationen und fand schließlich


ssh2_sftp_realpath im PHP-Handbuch, um den tatsächlichen Pfad der Datei zu überprüfen und schließlich die Adresse der Datei zurückzugeben Der Zugriff erfolgt nach der Verbindung mit SFTP. Ü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

Verwandte Empfehlungen:

So verbinden Sie PHP mit MySQL – mysqli und PDO

Detaillierte Erläuterung des PHP-Verbindungspools






Das obige ist der detaillierte Inhalt vonPHP stellt eine Verbindung zu SFTP her, um das Hoch- und Herunterladen von Dateien zu implementieren. 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