这篇文章介绍的内容是关于PHP 连接sftp 实现文件上传与下载,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下
最近开发一个与银行合作的项目,需要上传与下载文件。对文件保密有一定要求,所以用了SFTP。但实际开发中,遇到了很多问题,网上找的教程与案例都不能用,也是千遍一律 的,复制来,复制去的。最后在不断的调试后终于实现了PHP的文件上传与下载。现记录下来,仅供参考。
1.检查PHP版本,下载对应ssh2 扩展 https://windows.php.net/downloads/pecl/releases/ssh2/ ,具体安装,麻烦网上搜索一下。phpinfo()检查是否安装好。安装成功后,可以看到ssh2.
2. 网上提供的上传下截方法 (相信你肯定看到过)
<·?·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 "无法在服务器进行身份验证"; ·} ·?·>
但是我自己按照网上的教程,怎么也实现 不了,最后只好一步步排查原因。
$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);
首先前面3步是没有问题的
用copy ,file_get_content ,curl 方法实现上传下载都 报502错误 。检查了路径等问题,也没问题 ,但就是不能成功。
后面推断sftp服务器上的文件地址不能访问。
"ssh2.sftp://{$resSFTP}/var/testfile/abc.txt"
现在只有找到真正可用的地址才行,查看了很多资料,最后在PHP手册上找到了
ssh2_sftp_realpath 检查文件真实路径,最后返回连接上SFTP后访问文件的地址。传入"ssh2.sftp://{$resSFTP}/var/testfile/abc.txt"
会报错,说明这个地址是错的。最后检查出上传,下载地址不需要加上前面的
sh2.sftp://{$resSFTP}
直接用SFTP文件路径。
上传使用的函数也不能用 前面 提到的 copy ,file_get_content ,curl
需要用
ssh2_scp_send 上传
ssh2_scp_recv 下载
相关推荐:
以上是PHP 连接sftp 实现文件上传与下载的详细内容。更多信息请关注PHP中文网其他相关文章!

phpientifiesauser'ssessionusessessionSessionCookiesAndSessionIds.1)whiwSession_start()被称为,phpgeneratesainiquesesesessionIdStoredInacookInAcookInamedInAcienamedphpsessidontheuser'sbrowser'sbrowser.2)thisIdAllowSphptptpptpptpptpptortoreTessessionDataAfromtheserverMtheserver。

PHP会话的安全可以通过以下措施实现:1.使用session_regenerate_id()在用户登录或重要操作时重新生成会话ID。2.通过HTTPS协议加密传输会话ID。3.使用session_save_path()指定安全目录存储会话数据,并正确设置权限。

phpsessionFilesArestoredIntheDirectorySpecifiedBysession.save_path,通常是/tmponunix-likesystemsorc:\ windows \ windows \ temponwindows.tocustomizethis:tocustomizEthis:1)useession_save_save_save_path_path()

ToretrievedatafromaPHPsession,startthesessionwithsession_start()andaccessvariablesinthe$_SESSIONarray.Forexample:1)Startthesession:session_start().2)Retrievedata:$username=$_SESSION['username'];echo"Welcome,".$username;.Sessionsareserver-si

利用会话构建高效购物车系统的步骤包括:1)理解会话的定义与作用,会话是服务器端的存储机制,用于跨请求维护用户状态;2)实现基本的会话管理,如添加商品到购物车;3)扩展到高级用法,支持商品数量管理和删除;4)优化性能和安全性,通过持久化会话数据和使用安全的会话标识符。

本文讨论了PHP中的crypt()和password_hash()之间的差异,以进行密码哈希,重点介绍其实施,安全性和对现代Web应用程序的适用性。

文章讨论了通过输入验证,输出编码以及使用OWASP ESAPI和HTML净化器之类的工具来防止PHP中的跨站点脚本(XSS)。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

禅工作室 13.0.1
功能强大的PHP集成开发环境

螳螂BT
Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

mPDF
mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),

WebStorm Mac版
好用的JavaScript开发工具

VSCode Windows 64位 下载
微软推出的免费、功能强大的一款IDE编辑器