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 相关文章推荐
在WIN98下以apache模块方式安装php
Oct 09 PHP
个人站长制做网页常用的php代码
Mar 03 PHP
PHP之短标签开启设置
Jun 17 PHP
PHP5中实现多态的两种方法实例分享
Apr 21 PHP
深入理解PHP中的Streams工具
Jul 03 PHP
分享10段PHP常用代码
Nov 11 PHP
php微信公众平台示例代码分析(二)
Dec 06 PHP
PHP全功能无变形图片裁剪操作类与用法示例
Jan 10 PHP
php使用ftp实现文件上传与下载功能
Jul 21 PHP
Laravel中七个非常有用但很少人知道的Carbon方法
Sep 21 PHP
PHP实现验证码校验功能
Nov 16 PHP
PHP7中I/O模型内核剖析详解
Apr 14 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
php获取中文拼音首字母类和函数分享
2014/04/24 PHP
php简单压缩css样式示例
2016/09/22 PHP
Js(JavaScript)中,弹出是或否的选择框示例(confirm用法的实例分析)
2013/07/09 Javascript
使用node.js 制作网站前台后台
2014/11/13 Javascript
jquery解析json格式数据的方法(对象、字符串)
2015/11/24 Javascript
深入浅析JavaScript的API设计原则
2016/06/14 Javascript
json定义及jquery操作json的方法
2016/10/03 Javascript
NodeJS收发GET和POST请求的示例代码
2017/08/25 NodeJs
vue项目中v-model父子组件通信的实现详解
2017/12/10 Javascript
select标签设置默认选中的选项方法
2018/03/02 Javascript
js循环map 获取所有的key和value的实现代码(json)
2018/05/09 Javascript
vue写h5页面的方法总结
2019/02/12 Javascript
微信小程序制作表格的方法
2019/02/14 Javascript
详解Vue 全局变量,局部变量
2019/04/17 Javascript
JS实现的定时器展示简单秒表、页面弹框及跳转操作完整示例
2020/01/26 Javascript
微信小程序返回上一级页面的实现代码
2020/06/19 Javascript
微信小程序实现选择地址省市区三级联动
2020/06/21 Javascript
[04:09]2014DOTA2国际邀请赛Ti西雅图 历届冠军相继出局 BBC综述今日比赛
2014/07/20 DOTA
[06:11]2014DOTA2国际邀请赛 专访团结一心的VG战队
2014/07/21 DOTA
pycharm 使用心得(五)断点调试
2014/06/06 Python
Python的Flask框架中实现分页功能的教程
2015/04/20 Python
Android分包MultiDex策略详解
2017/10/30 Python
Python有参函数使用代码实例
2020/01/06 Python
150行Python代码实现带界面的数独游戏
2020/04/04 Python
python如何调用百度识图api
2020/09/29 Python
CSS3轻松实现圆角效果
2017/11/09 HTML / CSS
英国家庭、花园、汽车和移动解决方案:Easylife Group
2018/05/23 全球购物
Book Depository亚太地区:一家领先的国际图书零售商
2019/05/05 全球购物
零件设计自荐信范文
2013/11/27 职场文书
总经理助理职责
2014/02/04 职场文书
打造高效课堂实施方案
2014/03/22 职场文书
捐助倡议书范文
2014/04/15 职场文书
经管应届生求职信范文
2014/05/18 职场文书
简历自荐信范文
2015/03/09 职场文书
四年级数学教学反思
2016/02/16 职场文书
详解gantt甘特图可拖拽、编辑(vue、react都可用 highcharts)
2021/11/27 Vue.js