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 相关文章推荐
图形数字验证代码
Oct 09 PHP
PHP令牌 Token改进版
Jul 18 PHP
php 文件上传代码(限制jpg文件)
Jan 05 PHP
php 模拟POST|GET操作实现代码
Jul 20 PHP
用PHP写的基于Memcache的Queue实现代码
Nov 27 PHP
PHP遍历数组的几种方法
Mar 22 PHP
ThinkPHP 3.2 版本升级了哪些内容
Mar 05 PHP
PHP简单获取视频预览图的方法
Mar 12 PHP
Symfony2使用Doctrine进行数据库查询方法实例总结
Mar 18 PHP
PHP 类与构造函数解析
Feb 06 PHP
PHP编程快速实现数组去重的方法详解
Jul 22 PHP
详解php协程知识点
Sep 21 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
WordPress中is_singular()函数简介
2015/02/05 PHP
PHP中实现Bloom Filter算法
2015/03/30 PHP
PHP+Mysql+jQuery文件下载次数统计实例讲解
2015/10/10 PHP
非常重要的php正则表达式详解
2016/01/04 PHP
用jscript启动sqlserver
2007/06/21 Javascript
jQuery中[attribute^=value]选择器用法实例
2014/12/31 Javascript
js简单抽奖代码
2015/01/16 Javascript
javascript实现继承的简单实例
2015/07/26 Javascript
JS实现样式清新的横排下拉菜单效果
2015/10/09 Javascript
SWFUpload多文件上传及文件个数限制的方法
2016/05/31 Javascript
关于jQuery.ajax()的jsonp碰上post详解
2017/07/02 jQuery
gulp教程_从入门到项目中快速上手使用方法
2017/09/14 Javascript
本地搭建微信小程序服务器的实现方法
2017/10/27 Javascript
react native 仿微信聊天室实例代码
2019/09/17 Javascript
Vuex中实现数据状态查询与更改
2019/11/08 Javascript
VueX模块的具体使用(小白教程)
2020/06/05 Javascript
Python实现获取汉字偏旁部首的方法示例【测试可用】
2018/12/18 Python
python构建指数平滑预测模型示例
2019/11/21 Python
python烟花效果的代码实例
2020/02/25 Python
tensorflow中tf.reduce_mean函数的使用
2020/04/19 Python
使用Django的JsonResponse返回数据的实现
2021/01/15 Python
如果让你测试一台高速激光打印机,你都会进行哪些测试
2012/12/04 面试题
致裁判员加油稿
2014/02/08 职场文书
中文教师求职信
2014/02/22 职场文书
《独坐敬亭山》教学反思
2014/04/08 职场文书
品牌转让协议书
2014/08/20 职场文书
英文导游词
2015/02/13 职场文书
2015年人力资源工作总结
2015/04/08 职场文书
2015年学校总务工作总结
2015/07/20 职场文书
践行三严三实心得体会(2016推荐篇)
2016/01/06 职场文书
OpenCV-Python实现图像平滑处理操作
2021/06/08 Python
Python中22个万用公式的小结
2021/07/21 Python
浅析Python中的随机采样和概率分布
2021/12/06 Python
pycharm无法安装cv2模块问题
2022/05/20 Python
NoSQL优缺点与MongoDB数据库简介
2022/06/05 MongoDB
win10频率超出范围怎么办?win10老显示超出工作频率范围的解决方法
2022/07/07 数码科技