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脚本的10个技巧(2)
Oct 09 PHP
PHP生成网页快照 不用COM不用扩展.
Feb 11 PHP
ThinkPHP自动验证失败的解决方法
Jun 09 PHP
thinkphp路由规则使用示例详解和伪静态功能实现(apache重写)
Feb 24 PHP
windwos下使用php连接oracle数据库的过程分享
May 26 PHP
PHP中一些可以替代正则表达式函数的字符串操作函数
Nov 17 PHP
php获取网页里所有图片并存入数组的方法
Apr 06 PHP
thinkphp3.2中Lite文件替换框架入口文件或应用入口文件的方法
May 21 PHP
[原创]解决wincache不支持64位PHP5.5/5.6的问题(提供64位wincache下载)
Jun 22 PHP
Yii 2.0实现联表查询加搜索分页的方法示例
Aug 02 PHP
laravel 输出最后执行sql 附:whereIn的使用方法
Oct 10 PHP
PHP程序员简单的开展服务治理架构操作详解(二)
May 14 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
冰滴咖啡制作步骤
2021/03/03 冲泡冲煮
ThinkPHP中pathinfo的访问模式、路径访问模式及URL重写总结
2014/08/23 PHP
php使用pdo连接并查询sql数据库的方法
2014/12/24 PHP
PHP数组操作实例分析【添加,删除,计算,反转,排序,查找等】
2016/12/24 PHP
PHP基于timestamp和nonce实现的防止重放攻击方案分析
2019/07/26 PHP
基于jquery的关于动态创建DOM元素的问题
2010/12/24 Javascript
js 如何实现对数据库的增删改查
2012/11/23 Javascript
JavaScript中判断对象类型的几种方法总结
2013/11/11 Javascript
jQuery选择器全面总结
2014/01/06 Javascript
javascript编写贪吃蛇游戏
2015/07/07 Javascript
jquery实现左右滑动菜单效果代码
2015/08/27 Javascript
JS验证 只能输入小数点,数字,负数的实现方法
2016/10/07 Javascript
微信小程序  modal详解及实例代码
2016/11/09 Javascript
详解javascript表单的Ajax提交插件的使用
2016/12/29 Javascript
jQuery的三种bind/One/Live/On事件绑定使用方法
2017/02/23 Javascript
超出JavaScript安全整数限制的数字计算BigInt详解
2018/06/24 Javascript
iconfont的三种使用方式详解
2018/08/05 Javascript
node.js中stream流中可读流和可写流的实现与使用方法实例分析
2020/02/13 Javascript
Vue-cli assets SubDirectory及PublicPath区别详解
2020/08/18 Javascript
Python中的localtime()方法使用详解
2015/05/22 Python
解决python3在anaconda下安装caffe失败的问题
2017/06/15 Python
在PyCharm环境中使用Jupyter Notebook的两种方法总结
2018/05/24 Python
Python使用Selenium模块模拟浏览器抓取斗鱼直播间信息示例
2018/07/18 Python
详解python中@的用法
2019/03/27 Python
Python中有几个关键字
2020/06/04 Python
python调用有道智云API实现文件批量翻译
2020/10/10 Python
python中使用.py配置文件的方法详解
2020/11/23 Python
类和结构的区别
2012/08/15 面试题
应付会计岗位职责
2013/12/12 职场文书
文明学生标兵事迹
2014/01/21 职场文书
四群教育工作实施方案
2014/03/26 职场文书
2014年大学生党员自我评议
2014/09/22 职场文书
调解书格式范本
2015/05/20 职场文书
你会写请假条吗?
2019/06/26 职场文书
nginx限制并发连接请求数的方法
2021/04/01 Servers
SQL实战演练之网上商城数据库商品类别数据操作
2021/10/24 MySQL