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 相关文章推荐
把从SQL中取出的数据转化成XMl格式
Oct 09 PHP
PHP 和 MySQL 基础教程(二)
Oct 09 PHP
IStream与TStream之间的相互转换
Aug 01 PHP
php输出xml格式字符串(用的这个)
Jul 12 PHP
PHP实现提取一个图像文件并在浏览器上显示的代码
Oct 06 PHP
PHP 实现explort() 功能的详解
Jun 20 PHP
CodeIgniter中使用cookie的三种方式详解
Jul 18 PHP
PHP使用CURL模拟登录的方法
Jul 08 PHP
Zend Framework教程之Bootstrap类用法概述
Mar 14 PHP
PHP模块化安装教程
Jun 01 PHP
PHP十六进制颜色随机生成器功能示例
Jul 24 PHP
PHP编程一定要改掉的5个不良习惯
Sep 18 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 变量的定义方法
2010/01/26 PHP
深入探讨PHP中的内存管理问题
2011/08/31 PHP
PHP+MySQL统计该库中每个表的记录数并按递减顺序排列的方法
2016/02/15 PHP
jQuery bind事件使用详解
2011/05/05 Javascript
情人节之礼 js项链效果
2012/02/13 Javascript
一个简单的jQuery插件ajaxfileupload.js实现ajax上传文件例子
2014/06/26 Javascript
jquery访问ashx文件示例代码
2014/08/11 Javascript
详解JavaScript中的blink()方法的使用
2015/06/08 Javascript
Jquery easyui开启行编辑模式增删改操作
2016/01/14 Javascript
详解vue跨组件通信的几种方法
2017/06/15 Javascript
bootstrap可编辑下拉框jquery.editable-select
2017/10/12 jQuery
Javascript中的作用域及块级作用域
2017/12/08 Javascript
angularjs使用gulp-uglify压缩后执行报错的解决方法
2018/03/07 Javascript
vue解决弹出蒙层滑动穿透问题的方法
2018/09/22 Javascript
vue elementui tree 任意级别拖拽功能代码
2020/08/31 Javascript
VUE 项目在IE11白屏报错 SCRIPT1002: 语法错误的解决
2020/09/27 Javascript
详解JavaScript中的this指向问题
2021/02/05 Javascript
[38:27]完美世界DOTA2联赛PWL S2 Forest vs FTD.C 第二场 11.26
2020/11/30 DOTA
python实现360皮肤按钮控件示例
2014/02/21 Python
Python求解平方根的方法
2015/03/11 Python
Django查找网站项目根目录和对正则表达式的支持
2015/07/15 Python
python 线程的暂停, 恢复, 退出详解及实例
2016/12/06 Python
利用Python进行异常值分析实例代码
2017/12/07 Python
python如何实现内容写在图片上
2018/03/23 Python
TensorFlow实现卷积神经网络
2018/05/24 Python
基于Python爬取素材网站音频文件
2020/10/21 Python
python xlsxwriter模块的使用
2020/12/24 Python
乔丹诺(Giordano)酒庄德国官网:找到最好的意大利葡萄酒
2017/12/28 全球购物
国际旅客访问北美最大的汽车租赁提供商:Alamo Rent A Car
2018/06/13 全球购物
南非最大的在线时尚商店:Zando
2019/07/21 全球购物
省三好学生申请材料
2014/01/22 职场文书
火车的故事教学反思
2014/02/11 职场文书
技校学生个人职业生涯规划范文
2014/03/03 职场文书
领导欢迎词范文
2015/01/26 职场文书
高中同学会致辞
2015/08/01 职场文书
2016年社会管理综治宣传月活动总结
2016/03/16 职场文书