Maison >développement back-end >tutoriel php >PHP+sftp implémente le téléchargement et le téléchargement de fichiers

PHP+sftp implémente le téléchargement et le téléchargement de fichiers

零到壹度
零到壹度original
2018-04-11 18:03:124776parcourir

Le contenu de cet article est de partager avec vous le téléchargement de fichiers mis en œuvre par PHP+sftp. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer

. Récemment développé un projet de coopération avec les banques nécessite 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 implémenter le téléchargement, et 502 erreurs seront signalées. 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 une adresse vraiment utilisable. Après avoir vérifié de nombreuses informations, j'ai finalement trouvé

ssh2_sftp_realpath dans le manuel PHP. Vérifiez le chemin réel du fichier. , et enfin revenir à l'accès après connexion à SFTP L'adresse du fichier. Passer "ssh2.sftp://{$resSFTP}/var/testfile/abc.txt"

signalera une erreur, 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

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