• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    php连接sftp的作用以及实例代码

    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);

    以上就是本次介绍的全部知识点内容,感谢大家的学习和对脚本之家的支持。

    您可能感兴趣的文章:
    • java使用apache commons连接ftp修改ftp文件名失败原因
    • PHP连接sftp并下载文件的方法教程
    • Java FTPClient连接池的实现
    • Java语言实现简单FTP软件 FTP连接管理模块实现(8)
    • Java连接ftp服务器实例代码
    • python查看FTP是否能连接成功的方法
    • serv_u要关闭被动模式(PASV),使用PORT模式才能连接FTP的解决办法
    • 如何基于FTP4J实现FTPS连接过程解析
    上一篇:php依赖注入知识点详解
    下一篇:PHP使用观察者模式处理异常信息的方法详解
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    php连接sftp的作用以及实例代码 php,连接,sftp,的,作用,以及,