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获得文件扩展名三法
Nov 25 PHP
一贴学会PHP 新手入门教程
Aug 03 PHP
解析crontab php自动运行的方法
Jun 24 PHP
phpmyadmin config.inc.php配置示例
Aug 27 PHP
PHP return语句的另一个作用
Jul 30 PHP
配置php.ini实现PHP文件上传功能
Nov 27 PHP
摘自织梦CMS中的图片处理类
Aug 08 PHP
通过PHP自带的服务器来查看正则匹配结果的方法
Dec 24 PHP
php使用变量动态创建类的对象用法示例
Feb 06 PHP
PHP获取真实客户端的真实IP
Mar 07 PHP
PHP实现将优酷土豆腾讯视频html地址转换成flash swf地址的方法
Aug 04 PHP
php使用mysqli和pdo扩展,测试对比连接mysql数据库的效率完整示例
May 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在线生成ico文件的代码
2007/10/09 PHP
PHP mb_convert_encoding文字编码的转换函数介绍
2011/11/10 PHP
PHP和.net中des加解密的实现方法
2013/02/27 PHP
浅析php中如何在有限的内存中读取大文件
2013/07/02 PHP
php发送post请求函数分享
2014/03/06 PHP
php中spl_autoload详解
2014/10/17 PHP
浅析PHP文件下载原理
2014/12/25 PHP
yii分页组件用法实例分析
2015/12/28 PHP
PHP输出图像imagegif、imagejpeg与imagepng函数用法分析
2016/11/14 PHP
Thinkphp 空操作、空控制器、命名空间(详解)
2017/05/05 PHP
PHP实现的堆排序算法详解
2017/08/17 PHP
php微信公众号开发之答题连闯三关
2018/10/20 PHP
php生成微信红包数组的方法
2019/09/05 PHP
通过JAVAScript实现页面自适应
2007/01/19 Javascript
javascript 获取网页参数系统
2008/07/19 Javascript
JavaScript下申明对象的几种方法小结
2008/10/02 Javascript
jQuery页面图片伴随滚动条逐渐显示的小例子
2013/03/21 Javascript
javascript实现浏览器窗口传递参数的方法
2014/09/03 Javascript
基于pako.js实现gzip的压缩和解压功能示例
2017/06/13 Javascript
基于vue实现分页效果
2017/11/06 Javascript
JavaScript前端页面搜索功能案例【基于jQuery】
2019/07/10 jQuery
Vuex实现数据增加和删除功能
2019/11/11 Javascript
webpack中的模式(mode)使用详解
2020/02/20 Javascript
python实现模拟按键,自动翻页看u17漫画
2015/03/17 Python
python脚本替换指定行实现步骤
2017/07/11 Python
Python实现的用户登录系统功能示例
2018/02/05 Python
Python实现的读取电脑硬件信息功能示例
2018/05/30 Python
复化梯形求积分实例——用Python进行数值计算
2019/11/20 Python
Python flask框架如何显示图像到web页面
2020/06/03 Python
详解Html5 Canvas画线有毛边解决方法
2018/03/01 HTML / CSS
澳大利亚一站式数码相机商店:CameraPro
2020/03/09 全球购物
Farfetch巴西官网:奢侈品牌时尚购物平台
2020/10/19 全球购物
初中生个人学习的自我评价
2013/12/04 职场文书
陈欧的广告词
2014/03/18 职场文书
2015年教师党员承诺书
2015/04/27 职场文书
环境保护宣传标语大全!
2019/06/28 职场文书