Maison >développement back-end >tutoriel php >PHP se connecte à SFTP pour implémenter le téléchargement et le téléchargement de fichiers
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 = '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 "无法在服务器进行身份验证"; ·} ·?·>
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é
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
. 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!