PHP SFTP实现上传下载功能


Posted in PHP onJuly 26, 2017

 一、SFTP介绍:

使用SSH协议进行FTP传输的协议叫SFTP(安全文件传输)Sftp和Ftp都是文件传输协议。区别:sftp是ssh内含的协议(ssh是加密的telnet协议), 只要sshd服务器启动了,它就可用,而且sftp安全性较高,它本身不需要ftp服务器启动。 sftp = ssh + ftp(安全文件传输协议)。由于ftp是明文传输的, 没有安全性,而sftp基于ssh,传输内容是加密过的,较为安全。目前网络不太安全,以前用telnet的都改用ssh2(SSH1已被破解)。

sftp这个工具和ftp用法一样。但是它的传输文件是通过ssl加密了的,即使被截获了也无法破解。而且sftp相比ftp功能要多一些,多了一些文件属性的设置。 

二、SSH2扩展配置

1.  下载地址:http://windows.php.net/downloads/pecl/releases/ssh2/0.12/

根据自己的php版本选择 扩展包,这里我使用的是php5.3,所以我下载的是 php_ssh2-0.12-5.3-ts-vc9-x86.zip(下载链接)

PHP SFTP实现上传下载功能

2. 解压完后,会有三个文件,libssh2.dll、php_ssh.dll、php_ssh2.pdb。 

3. 将 php_ssh.dll、php_ssh2.pdb 放到你的 php 扩展目录下 php/ext/ 下。 

4. 将libssh2.dll 复制到 c:/windows/system32 和 c:/windows/syswow64 各一份 

5.在 php.ini中加入 extension=php_ssh2.dll

6.重启Apache, 打印phpinfo(); 会出现 SSH2 扩展,表示安装成功

PHP SFTP实现上传下载功能

三、SFTP 代码DEMO

调用代码

$config = array(
  'host' =>'211.*.*.*', //服务器
  'port' => '23', //端口
  'username' =>'test', //用户名
  'password' =>'*****', //密码
 );
 $ftp = new Sftp($config);
 $localpath="E:/www/new_20170724.csv";
 $serverpath='/new_20170724.csv';
 $st = $ftp->upftp($localpath,$serverpath); //上传指定文件
 if($st == true){
  echo "success";
  
 }else{
  echo "fail";
 }

SFTP 封装类

<?php
/**
 * SFtp上传下载文件
 *
 */
namespace Common\ORG\Util;

class Sftp
{
 
 // 初始配置为NULL
 private $config = NULL;
 // 连接为NULL
 private $conn = NULL;
 // 初始化
 public function __construct($config)
 {
 $this->config = $config;
 $this->connect();
 }
 

 public function connect()
 {
 
 $this->conn = ssh2_connect($this->config['host'], $this->config['port']);
 if( ssh2_auth_password($this->conn, $this->config['username'], $this->config['password']))
 {
  
 }else{ 
  echo "无法在服务器进行身份验证";
 }
 
 }
 
 // 传输数据 传输层协议,获得数据
 public function downftp($remote, $local)
 { 
 $ressftp = ssh2_sftp($this->conn);
 return copy("ssh2.sftp://{$ressftp}".$remote, $local);
 }
 
 // 传输数据 传输层协议,写入ftp服务器数据
 public function upftp( $local,$remote, $file_mode = 0777)
 { 
 $ressftp = ssh2_sftp($this->conn);
 return copy($local,"ssh2.sftp://{$ressftp}".$remote); 
 
 }
 
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
如何在PHP中使用Oracle数据库(2)
Oct 09 PHP
php表单转换textarea换行符的方法
Sep 10 PHP
php FLEA中二叉树数组的遍历输出
Sep 26 PHP
做了CDN获取用户真实IP的函数代码(PHP与Asp设置方式)
Apr 13 PHP
php的mssql数据库连接类实例
Nov 28 PHP
PHP中两个float(浮点数)比较实例分析
Sep 27 PHP
PHP数据的提交与过滤基本操作实例详解
Nov 11 PHP
Symfony2创建基于域名的路由相关示例
Nov 14 PHP
php根据年月获取当月天数及日期数组的方法
Nov 30 PHP
基于ThinkPHP5框架使用QueryList爬取并存入mysql数据库操作示例
May 25 PHP
TP5框架简单登录功能实现方法示例
Oct 31 PHP
如何用PHP实现分布算法之一致性哈希算法
May 26 PHP
Windows平台实现PHP连接SQL Server2008的方法
Jul 26 #PHP
php判断str字符串是否是xml格式数据的方法示例
Jul 26 #PHP
深入理解Yii2.0乐观锁与悲观锁的原理与使用
Jul 26 #PHP
php实现微信企业号支付个人的方法详解
Jul 26 #PHP
PHP编程实现微信企业向用户付款的方法示例
Jul 26 #PHP
浅谈Yii乐观锁的使用及原理
Jul 25 #PHP
PHP异常处理定义与使用方法分析
Jul 25 #PHP
You might like
php INI配置文件的解析实现分析
2011/01/04 PHP
CodeIgniter生成网站sitemap地图的方法
2013/11/13 PHP
php之readdir函数用法实例
2014/11/13 PHP
基于PHP技术开发客服工单系统
2016/01/06 PHP
php插入mysql数据返回id的方法
2018/05/31 PHP
解决jquery的datepicker的本地化以及Today问题
2012/05/23 Javascript
利用webqq协议使用python登录qq发消息源码参考
2013/04/08 Javascript
javascript实例分享---具有立体效果的图片特效
2014/06/08 Javascript
jQuery实现瀑布流布局
2014/12/12 Javascript
js实现当前输入框高亮显示的方法
2015/08/19 Javascript
js实现(全选)多选按钮的方法【附实例】
2016/03/30 Javascript
javascript截图 jQuery插件imgAreaSelect使用详解
2016/05/04 Javascript
功能强大的jquery.validate表单验证插件
2016/11/07 Javascript
微信小程序实战之仿android fragment可滑动底部导航栏(4)
2020/04/16 Javascript
微信小程序request出现400的问题解决办法
2017/05/23 Javascript
NodeJS自定义模块写法(详解)
2017/06/27 NodeJs
webpack引入eslint配置详解
2018/01/22 Javascript
Vue手把手教你撸一个 beforeEnter 钩子函数
2018/04/24 Javascript
JavaScript栈和队列相关操作与实现方法详解
2018/12/07 Javascript
Angular2 自定义表单验证器的实现方法
2018/12/14 Javascript
JS实现页面数据懒加载
2020/02/13 Javascript
如何使用JavaScript检测空闲的浏览器选项卡
2020/05/28 Javascript
解决vue中el-tab-pane切换的问题
2020/07/19 Javascript
javascript的hashCode函数实现代码小结
2020/08/11 Javascript
python re正则表达式模块(Regular Expression)
2014/07/16 Python
用python写的一个wordpress的采集程序
2016/02/27 Python
剖析Python的Twisted框架的核心特性
2016/05/25 Python
python实现kNN算法识别手写体数字的示例代码
2019/08/16 Python
QML使用Python的函数过程解析
2019/09/26 Python
python manage.py runserver流程解析
2019/11/08 Python
使用keras根据层名称来初始化网络
2020/05/21 Python
英国在线玫瑰专家:InterRose
2019/12/01 全球购物
自立自强的名人事例
2014/02/10 职场文书
婚礼家长致辞
2015/07/27 职场文书
婚宴领导致辞
2015/07/28 职场文书
汽车销售合同文本
2019/08/08 职场文书