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 header()函数使用说明
Jul 10 PHP
PHP正确解析UTF-8字符串技巧应用
Nov 07 PHP
PHP header()函数使用详细(301、404等错误设置)
Apr 17 PHP
ThinkPHP应用模式扩展详解
Jul 16 PHP
ioncube_loader_win_5.2.dll的错误解决方法
Jan 04 PHP
php微信公众平台开发之微信群发信息
Sep 13 PHP
php 人员权限管理(RBAC)实例(推荐)
May 24 PHP
PHP Laravel 上传图片、文件等类封装
Aug 16 PHP
实例分析基于PHP微信网页获取用户信息
Nov 24 PHP
PHP模型Model类封装数据库操作示例
Mar 14 PHP
PHP pthreads v3下的Volatile简介与使用方法示例
Feb 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
聊天室php&mysql(一)
2006/10/09 PHP
使用php统计字符串中中英文字符的个数
2013/06/23 PHP
Linux安装配置php环境的方法
2016/01/14 PHP
PHP数组函数array_multisort()用法实例分析
2016/04/02 PHP
浅谈mysql_query()函数的返回值问题
2016/09/05 PHP
php实现产品加入购物车功能(1)
2020/07/23 PHP
PHP7 新增常量
2021/03/09 PHP
很酷的javascript loading效果代码
2008/06/18 Javascript
onsubmit阻止form表单提交与onclick的相关操作
2010/09/03 Javascript
js实现可拖动DIV的方法
2013/12/17 Javascript
多选列表框动态添加,移动,删除,全选等操作的简单实例
2014/01/13 Javascript
JavaScript自定义日期格式化函数详细解析
2014/01/14 Javascript
使用Nodejs开发微信公众号后台服务实例
2014/09/03 NodeJs
关于JavaScript和jQuery的类型判断详解
2016/10/08 Javascript
js 弹出虚拟键盘修改密码的简单实例
2016/10/10 Javascript
selenium 与 chrome 进行qq登录并发邮件操作实例详解
2017/04/06 Javascript
H5基于iScroll实现下拉刷新和上拉加载更多
2017/07/18 Javascript
vue Element-ui input 远程搜索与修改建议显示模版的示例代码
2017/10/19 Javascript
浅谈React中的元素、组件、实例和节点
2018/02/27 Javascript
详解基于vue的服务端渲染框架NUXT
2018/06/20 Javascript
mpvue+vant app搭建微信小程序的方法步骤
2019/02/11 Javascript
解决vuex数据页面刷新后初始化操作
2020/07/26 Javascript
JavaScript实现刮刮乐效果
2020/11/01 Javascript
Python编程中的for循环语句学习教程
2015/10/14 Python
用Python画小女孩放风筝的示例
2019/11/23 Python
浅谈python3 构造函数和析构函数
2020/03/12 Python
python 递归调用返回None的问题及解决方法
2020/03/16 Python
老生常谈CSS中的长度单位
2016/06/27 HTML / CSS
西班牙灯具网上商店:Lampara.es
2018/06/05 全球购物
最热门的自我评价
2013/12/30 职场文书
交通事故死亡赔偿协议书
2014/12/03 职场文书
企业百日安全活动总结
2015/05/07 职场文书
步步惊心观后感
2015/06/12 职场文书
Python获取指定日期是"星期几"的6种方法
2022/03/13 Python
剑指Offer之Java算法习题精讲二叉树的构造和遍历
2022/03/21 Java/Android
一文了解Java动态代理的原理及实现
2022/07/07 Java/Android