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 XML备份Mysql数据库
May 27 PHP
使用zend studio for eclipse不能激活代码提示功能的解决办法
Oct 11 PHP
使用php实现截取指定长度
Aug 06 PHP
php多文件上传实现代码
Feb 20 PHP
php实现批量下载百度云盘文件例子分享
Apr 10 PHP
php可应用于面包屑导航的递归寻找家谱树实现方法
Feb 02 PHP
php生成过去100年下拉列表的方法
Jul 20 PHP
PHP对象链式操作实现原理分析
Oct 09 PHP
PHP实现小偷程序实例
Oct 31 PHP
thinkphp 验证码 的使用小结
May 07 PHP
解决PHP使用CURL发送GET请求时传递参数的问题
Oct 11 PHP
Laravel 集成微信用户登录和绑定的实现
Dec 27 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的可变变量名需要的注意的问题
2013/06/20 PHP
启用Csrf后POST数据时出现的400错误
2015/07/05 PHP
PHP编程实现微信企业向用户付款的方法示例
2017/07/26 PHP
实例讲解PHP页面静态化
2018/02/05 PHP
JavaScript 定义function的三种方式小结
2009/10/16 Javascript
js sort 二维数组排序的用法小结
2014/01/24 Javascript
JavaScript实现按Ctrl键打开新页面
2014/09/04 Javascript
Javascript基础教程之关键字和保留字汇总
2015/01/18 Javascript
JS基于myFocus库实现各种功能的tab选项卡切换效果
2015/09/19 Javascript
animate 实现滑动切换效果【实例代码】
2016/05/05 Javascript
javascript事件捕获机制【深入分析IE和DOM中的事件模型】
2016/12/15 Javascript
js代码实现下拉菜单【推荐】
2016/12/15 Javascript
JQuery和HTML5 Canvas实现弹幕效果
2017/01/04 Javascript
在Debian(Raspberry Pi)树莓派上安装NodeJS的教程详解
2017/09/19 NodeJs
结合mint-ui移动端下拉加载实践方法总结
2017/11/08 Javascript
vue2.0使用swiper组件实现轮播效果
2017/11/27 Javascript
JS代码实现电脑配置检测功能
2018/03/21 Javascript
vue生成文件本地打开查看效果的实例
2018/09/06 Javascript
原生js实现表格循环滚动
2020/11/24 Javascript
[50:58]2018DOTA2亚洲邀请赛 4.1 小组赛 B组 Mineski vs EG
2018/04/03 DOTA
[01:48]帕吉至宝加入游戏,遗迹战场现“千劫神屠”
2018/04/07 DOTA
[01:10:57]Liquid vs OG 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
python数组复制拷贝的实现方法
2015/06/09 Python
使用Python读写及压缩和解压缩文件的示例
2016/07/08 Python
Python使用文件锁实现进程间同步功能【基于fcntl模块】
2017/10/16 Python
Python编程argparse入门浅析
2018/02/07 Python
CSS3使用transition实现的鼠标悬停淡入淡出
2015/01/09 HTML / CSS
webView加载html图片遇到的问题解决
2019/10/08 HTML / CSS
如何清空Session
2015/02/23 面试题
测试工程师程序员求职信范文
2014/02/20 职场文书
科技工作者先进事迹
2014/08/16 职场文书
销售员未完成销售业绩的检讨书
2014/10/12 职场文书
2015年人民调解工作总结
2015/05/18 职场文书
新闻稿件写作技巧
2015/07/18 职场文书
党员学习型组织心得体会
2019/06/21 职场文书
JavaScript parseInt0.0000005打印5原理解析
2022/07/23 Javascript