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 = '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 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é
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
. 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!