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作的文本留言本的例子(四)
Oct 09 PHP
php与java通过socket通信的实现代码
Oct 21 PHP
sae使用smarty模板的方法
Dec 17 PHP
destoon实现调用当前栏目分类及子分类和三级分类的方法
Aug 21 PHP
Yii配置文件用法详解
Dec 04 PHP
用php来限制每个ip每天浏览页面数量的实现思路
Feb 24 PHP
php在apache环境下实现gzip配置方法
Apr 02 PHP
调试WordPress中定时任务的相关PHP脚本示例
Dec 10 PHP
thinkPHP查询方式小结
Jan 09 PHP
yii2 RBAC使用DbManager实现后台权限判断的方法
Jul 23 PHP
phpinfo()中Loaded Configuration File(none)的解决方法
Jan 16 PHP
laravel实现按月或天或小时统计mysql数据的方法
Oct 09 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 stristr() 函数(不区分大小写的字符串查找)
2010/06/03 PHP
yii2缓存Caching基本用法示例
2016/07/18 PHP
PHP与jquery实时显示网站在线人数实例详解
2016/12/02 PHP
基于php流程控制语句和循环控制语句(讲解)
2017/10/23 PHP
IE7中javascript操作CheckBox的checked=true不打勾的解决方法
2009/12/07 Javascript
js函数模拟显示桌面.scf程序示例
2014/04/20 Javascript
javascript几个易错点记录
2014/11/26 Javascript
jQuery中first()方法用法实例
2015/01/06 Javascript
Jquery easyui开启行编辑模式增删改操作
2016/01/14 Javascript
jQuery遍历DOM元素与节点方法详解
2016/04/14 Javascript
Bootstarp基本模版学习教程
2017/02/01 Javascript
js实现图片无缝循环轮播
2019/10/28 Javascript
node.js中 redis 的安装和基本操作示例
2020/02/10 Javascript
Python实现将绝对URL替换成相对URL的方法
2015/06/28 Python
在Python中使用正则表达式的方法
2015/08/13 Python
如何准确判断请求是搜索引擎爬虫(蜘蛛)发出的请求
2015/10/13 Python
Python对象类型及其运算方法(详解)
2017/07/05 Python
在cmd中运行.py文件: python的操作步骤
2018/05/12 Python
python set内置函数的具体使用
2019/07/02 Python
详解python中*号的用法
2019/10/21 Python
Python 脚本实现淘宝准点秒杀功能
2019/11/13 Python
使用 Python 遍历目录树的方法
2020/02/29 Python
python绕过图片滑动验证码实现爬取PTA所有题目功能 附源码
2021/01/06 Python
matplotlib绘制多子图共享鼠标光标的方法示例
2021/01/08 Python
前端水印的简单实现代码示例
2020/12/02 HTML / CSS
实习生个人的自我评价
2013/12/08 职场文书
客户经理岗位职责
2013/12/08 职场文书
高二美术教学反思
2014/01/14 职场文书
2014学雷锋活动总结
2014/03/09 职场文书
入党积极分子学习优秀共产党员先进事迹思想汇报
2014/09/13 职场文书
三下乡个人总结
2015/03/04 职场文书
人间正道是沧桑观后感
2015/06/15 职场文书
创业计划书之干洗店
2019/09/10 职场文书
Mysql MVCC机制原理详解
2021/04/20 MySQL
laravel添加角色和模糊搜索功能的实现代码
2021/06/22 PHP
修改并编译golang源码的操作步骤
2021/07/25 Golang