php连接sftp的作用以及实例代码


Posted in PHP onSeptember 23, 2019

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功能要多一些,多了一些文件属性的设置

// 注意这里只是为了介绍ftp ,并没有做验证 ;   

class ftp{

   

  // 初始配置为NULL

  private $config =NULL ;

  // 连接为NULL 

  private $conn = NULL;

   

  public function init($config){

   $this->config = $config;  

  }

   

  // ftp 连接 

  public function connect(){

    return $this->conn = ftp_connect($this->config['host'],$this->config['port'])); 

  }

   

   

  // 传输数据 传输层协议,获得数据 true or false 

 public function download($remote, $local,$mode = 'auto'){

   return $result = @ftp_get($this->conn, $localpath, $remotepath, $mode);

 }

  

 // 传输数据 传输层协议,上传数据 true or false 

 public function upload($remote, $local,$mode = 'auto'){

   return $result = @ftp_put($this->conn, $localpath, $remotepath, $mode);

 }

  

  

   // 删除文件 

  public function remove($remote){

   return $result = @ftp_delete($this->conn_id, $file);

  }

  

   

}    

 

 

 

// 使用 

$config = array(

      'hostname' => 'localhost',

   'username' => 'root',

   'password' => 'root',

   'port' => 21

 

) ;

  

$ftp = new Ftp();

$ftp->connect($config);

$ftp->upload('ftp_err.log','ftp_upload.log');

$ftp->download('ftp_upload.log','ftp_download.log');

 

 

 

/*根据上面的三个协议写出基于ssh 的ftp 类

我们知道进行身份认证的方式有两种:公钥;密码 ;

(1) 使用密码登陆

(2) 免密码登陆也就是使用公钥登陆 

 

*/

 

class sftp{

   

   

  // 初始配置为NULL

  private $config =NULL ;

  // 连接为NULL 

  private $conn = NULL;

 

   

  // 是否使用秘钥登陆 

   private $use_pubkey_file= false;

   

  // 初始化

  public function init($config){

    $this->config = $config ; 

  }

   

   

  // 连接ssh ,连接有两种方式(1) 使用密码

  // (2) 使用秘钥 

  public function connect(){

     

    $methods['hostkey'] = $use_pubkey_file ? 'ssh-rsa' : [] ; 

    $con = ssh2_connect($this->config['host'], $this->config['port'], $methods);

    //(1) 使用秘钥的时候 

    if($use_pubkey_file){

    // 用户认证协议

       $rc = ssh2_auth_pubkey_file(

        $conn,

        $this->config['user'],

        $this->config['pubkey_file'],

        $this->config['privkey_file'],

        $this->config['passphrase']) 

      );

    //(2) 使用登陆用户名字和登陆密码

    }else{

      $rc = ssh2_auth_password( $conn, $this->conf_['user'],$this->conf_['passwd']);

    

    }

     

    return $rc ; 

  }

   

   

  // 传输数据 传输层协议,获得数据

   public function download($remote, $local){

      

     return ssh2_scp_recv($this->conn_, $remote, $local);

   }

    

   //传输数据 传输层协议,写入ftp服务器数据

   public function upload($remote, $local,$file_mode=0664){

     return ssh2_scp_send($this->conn_, $local, $remote, $file_mode);

      

   }

    

   // 删除文件 

   public function remove($remote){

      $sftp = ssh2_sftp($this->conn_);

      $rc = false;

 

  if (is_dir("ssh2.sftp://{$sftp}/{$remote}")) {

      $rc = false ;

       

      // ssh 删除文件夹

   $rc = ssh2_sftp_rmdir($sftp, $remote);

      } else {

     // 删除文件

        $rc = ssh2_sftp_unlink($sftp, $remote);

      }

      return $rc;

       

    }

      

  

  

   

}

 

 

$config = [

 "host"   => "192.168.1.1 ",  // ftp地址

 "user"   => "***", 

 "port"   => "22",

 "pubkey_path" => "/root/.ssh/id_rsa.pub", // 公钥的存储地址

 "privkey_path" => "/root/.ssh/id_rsa",   // 私钥的存储地址

];

 

$handle = new SftpAccess();

$handle->init($config);

$rc = $handle->connect();

$handle->getData(remote, $local);

以上就是本次介绍的全部知识点内容,感谢大家的学习和对三水点靠木的支持。

PHP 相关文章推荐
php面向对象全攻略 (一) 面向对象基础知识
Sep 30 PHP
php不用内置函数对数组排序的两个算法代码
Feb 08 PHP
PHP 根据IP地址控制访问的代码
Apr 22 PHP
PHP+Mysql树型结构(无限分类)数据库设计的2种方式实例
Jul 15 PHP
PHP时间和日期函数详解
May 08 PHP
PHP实现清除MySQL死连接的方法
Jul 23 PHP
yii2中dropDownList实现二级和三级联动写法
Apr 26 PHP
php 使用curl模拟ip和来源进行访问的实现方法
May 02 PHP
php魔法函数与魔法常量使用介绍
Jul 23 PHP
通过修改Laravel Auth使用salt和password进行认证用户详解
Aug 17 PHP
PHP异常类及异常处理操作实例详解
Dec 19 PHP
PHP+redis实现微博的拉模型案例详解
Jul 10 PHP
php依赖注入知识点详解
Sep 23 #PHP
php引用和拷贝的区别知识点总结
Sep 23 #PHP
php异常处理捕获错误整理
Sep 23 #PHP
ThinkPHP 5.x远程命令执行漏洞复现
Sep 23 #PHP
PHP开启目录引索+fancyindex漂亮目录浏览带搜索功能
Sep 23 #PHP
redis+php实现微博(三)微博列表功能详解
Sep 23 #PHP
redis+php实现微博(二)发布与关注功能详解
Sep 23 #PHP
You might like
融入意大利的咖啡文化
2021/03/03 咖啡文化
php小偷相关截取函数备忘
2010/11/28 PHP
php动态读取数据清除最右边距的方法
2017/04/12 PHP
jQuery setTimeout()函数使用方法
2013/04/07 Javascript
js字符串截取函数substr substring slice使用对比
2013/11/27 Javascript
jquery队列queue与原生模仿其实现方法分享
2014/03/25 Javascript
JavaScript代码复用模式详解
2014/11/07 Javascript
JQuery菜单效果的两个实例讲解(3)
2015/09/17 Javascript
浅谈angular.js中实现双向绑定的方法$watch $digest $apply
2015/10/14 Javascript
JavaScript获取页面中超链接数量的方法
2015/11/09 Javascript
jquery获取点击控件的绝对位置简单实例
2016/10/13 Javascript
详解JavaScript模块化开发
2016/12/04 Javascript
浅谈vue中.vue文件解析流程
2018/04/24 Javascript
JavaScript实现一个简易的计算器实例代码
2018/05/10 Javascript
详解Vue webapp项目通过HBulider打包原生APP
2018/06/29 Javascript
解决elementUI 切换tab后 el_table 固定列下方多了一条线问题
2020/07/19 Javascript
[46:47]2014 DOTA2国际邀请赛中国区预选赛5.21 LGD-CDEC VS NE
2014/05/22 DOTA
python中使用pyhook实现键盘监控的例子
2014/07/18 Python
python中xrange用法分析
2015/04/15 Python
python版本的读写锁操作方法
2016/04/25 Python
Python环境变量设置方法
2016/08/28 Python
Python入门_学会创建并调用函数的方法
2017/05/16 Python
matplotlib在python上绘制3D散点图实例详解
2017/12/09 Python
Pythony运维入门之Socket网络编程详解
2019/04/15 Python
基于Python新建用户并产生随机密码过程解析
2019/10/08 Python
Python 实现将大图切片成小图,将小图组合成大图的例子
2020/03/14 Python
巴西最大的玩具连锁店:Ri Happy
2020/06/17 全球购物
Oracle的内存结构(Memory structures)
2015/06/10 面试题
现在输入n个数字,以逗号,分开;然后可选择升或者降序排序;按提交键就在另一页面显示按什么排序,结果为,提供reset
2012/11/09 面试题
关于奉献的演讲稿
2014/05/21 职场文书
2014党员干部四风问题对照检查材料思想汇报
2014/09/24 职场文书
2015年师德师风承诺书
2015/01/22 职场文书
迎新生欢迎词2015
2015/07/16 职场文书
企业财务管理制度范本
2015/08/04 职场文书
关于教师节的广播稿
2015/08/19 职场文书
您对思维方式了解多少?
2019/12/09 职场文书