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 相关文章推荐
ftp类(myftp.php)
Oct 09 PHP
写出高质量的PHP程序
Feb 04 PHP
在windows服务器开启php的gd库phpinfo中未发现
Jan 13 PHP
基于php-fpm 参数的深入理解
Jun 03 PHP
解决PHP mysql_query执行超时(Fatal error: Maximum execution time …)
Jul 03 PHP
Codeigniter中mkdir创建目录遇到权限问题和解决方法
Jul 25 PHP
php rsa加密解密使用详解
Jan 14 PHP
PHP实现多维数组转字符串和多维数组转一维数组的方法
Aug 08 PHP
PHP 获取 ping 时间的实现方法
Sep 29 PHP
php实现微信模板消息推送
Mar 30 PHP
ThinkPHP 3使用OSS的方法
Jul 19 PHP
php use和include区别总结
Oct 13 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
现磨咖啡骗局!现磨咖啡=新鲜咖啡?现磨咖啡背后的猫腻你不懂!
2019/03/28 冲泡冲煮
PHP操作文件方法问答
2007/03/16 PHP
前端必学之PHP语法基础
2016/01/01 PHP
如何利用预加载优化Laravel Model查询详解
2017/08/11 PHP
JavaScript CSS修改学习第一章 查找位置
2010/02/19 Javascript
JavaScript中的类与实例实现方法
2015/01/23 Javascript
jquery获取所有选中的checkbox实现代码
2016/05/26 Javascript
利用bootstrapValidator验证UEditor
2016/09/14 Javascript
JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)
2016/12/14 Javascript
jQuery操作复选框(CheckBox)的取值赋值实现代码
2017/01/10 Javascript
jQuery实现别踩白块儿网页版小游戏
2017/01/18 Javascript
JavaScript中捕获与冒泡详解及实例
2017/02/03 Javascript
vue页面使用阿里oss上传功能的实例(一)
2017/08/09 Javascript
JS实现的缓冲运动效果示例
2018/04/30 Javascript
详解vue几种主动刷新的方法总结
2019/02/19 Javascript
Layui 解决表格异步调用后台分页的问题
2019/10/26 Javascript
JS+CSS实现过渡特效
2021/01/02 Javascript
浅析Python 3 字符串中的 STR 和 Bytes 有什么区别
2018/10/14 Python
python scipy求解非线性方程的方法(fsolve/root)
2018/11/12 Python
利用python在excel里面直接使用sql函数的方法
2019/02/08 Python
获取django框架orm query执行的sql语句实现方法分析
2019/06/20 Python
使用python实现ftp的文件读写方法
2019/07/02 Python
python 一篇文章搞懂装饰器所有用法(建议收藏)
2019/08/23 Python
python 实现绘制整齐的表格
2019/11/18 Python
Python计算公交发车时间的完整代码
2020/02/12 Python
Python性能分析工具py-spy原理用法解析
2020/07/27 Python
python 实现IP子网计算
2021/02/18 Python
世界最大域名注册商:GoDaddy
2016/07/24 全球购物
高中毕业自我鉴定范文
2013/10/02 职场文书
实习教师自我鉴定
2013/12/12 职场文书
暑期实践思想汇报
2014/01/06 职场文书
汽车装潢店创业计划书范文
2014/02/05 职场文书
工作疏忽、懈怠的检讨书
2014/09/11 职场文书
二年级上册数学教学计划
2015/01/20 职场文书
老公出轨后的保证书
2015/05/08 职场文书
3招让你摆脱即兴讲话冷场尴尬
2019/08/08 职场文书