Maison  >  Article  >  développement back-end  >  PHP se connecte à SFTP pour implémenter le téléchargement et le téléchargement de fichiers

PHP se connecte à SFTP pour implémenter le téléchargement et le téléchargement de fichiers

不言
不言original
2018-04-16 10:07:142298parcourir

Le contenu de cet article concerne la connexion de sftp à PHP pour réaliser le téléchargement et le téléchargement de fichiers. Il a une certaine valeur de référence. Maintenant, je le partage avec vous. Les amis dans le besoin peuvent s'y référer

Récemment développé. projet de coopération avec les banques Les projets nécessitent le téléchargement et le téléchargement de fichiers. Il existe certaines exigences en matière de confidentialité des fichiers, c'est pourquoi SFTP est utilisé. Cependant, lors du développement réel, nous avons rencontré de nombreux problèmes. Les tutoriels et les cas trouvés en ligne ne pouvaient pas être utilisés et ils étaient copiés à maintes reprises. Enfin, après un débogage constant, le téléchargement et le téléchargement des fichiers PHP ont finalement été réalisés. Il est enregistré maintenant à titre de référence uniquement.

1. Vérifiez la version PHP et téléchargez l'extension ssh2 correspondante https://windows.php.net/downloads/pecl/releases/ssh2/ . phpinfo() vérifie s'il est installé. Après une installation réussie, vous pouvez voir ssh2.

2 Méthodes de téléchargement fournies sur Internet (je pense que vous devez les avoir vues)

<·?·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 "无法在服务器进行身份验证";
·}
·?·>

Mais D'après les tutoriels en ligne, je n'y suis pas parvenu, j'ai donc dû découvrir la cause étape par étape.

         $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);

Tout d'abord, il n'y a aucun problème dans les trois premières étapes

Utilisez les méthodes copy, file_get_content, curl pour réaliser le téléchargement, et une erreur 502 sera signalée. J'ai vérifié le chemin et d'autres problèmes, et il n'y a eu aucun problème, mais cela n'a tout simplement pas réussi.

Il est déduit plus tard que l'adresse du fichier sur le serveur SFTP n'est pas accessible.

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

Maintenant, le seul moyen est de trouver le véritable adresse disponible. , vérifié beaucoup d'informations, et finalement trouvé


ssh2_sftp_realpath dans le manuel PHP pour vérifier le chemin réel du fichier, et enfin renvoyer l'adresse du fichier. accessible après la connexion à SFTP. Passez "ssh2.sftp://{$resSFTP}/var/testfile/abc.txt"

et une erreur sera signalée, indiquant que cette adresse est erronée. Enfin, vérifiez le téléchargement. L'adresse de téléchargement n'a pas besoin d'être précédée de

sh2.sftp://{$resSFTP}

. chemin directement.

Les fonctions utilisées pour le téléchargement ne peuvent pas être utilisées. Les copie, file_get_content, curl

doivent être utilisées pour le téléchargement. ssh2_scp_send

ssh2_scp_recv Télécharger

Recommandations associées :

Comment connecter PHP à MySQL - MySQLi et PDO

Explication détaillée du pool de connexions PHP






Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn