当前位置:首页 > PHP教程 > php应用 > 列表

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

发布:smiling 来源: PHP粉丝网  添加日期:2021-12-22 09:38:29 浏览: 评论:0 

在本篇文章里小编给各位整理的是关于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功能要多一些,多了一些文件属性的设置。

  1. // 注意这里只是为了介绍ftp ,并没有做验证 ;    
  2.  
  3. class ftp{ 
  4.  
  5.      
  6.  
  7.   // 初始配置为NULL 
  8.  
  9.   private $config =NULL ; 
  10.  
  11.   // 连接为NULL  
  12.  
  13.   private $conn = NULL; 
  14.  
  15.      
  16.  
  17.   public function init($config){ 
  18.  
  19.    $this->config = $config;   
  20.  
  21.   } 
  22.  
  23.      
  24.  
  25.   // ftp 连接  
  26.  
  27.   public function connect(){ 
  28.  
  29.     return $this->conn = ftp_connect($this->config['host'],$this->config['port']));  
  30.  
  31.   } 
  32.  
  33.      
  34.  
  35.      
  36.  
  37.   // 传输数据 传输层协议,获得数据 true or false  
  38.  
  39.  public function download($remote$local,$mode = 'auto'){ 
  40.  
  41.    return $result = @ftp_get($this->conn, $localpath$remotepath$mode); 
  42.  
  43.  } 
  44.  
  45.     
  46.  
  47.  // 传输数据 传输层协议,上传数据 true or false  
  48.  
  49.  public function upload($remote$local,$mode = 'auto'){ 
  50.  
  51.    return $result = @ftp_put($this->conn, $localpath$remotepath$mode); 
  52.  
  53.  } 
  54.  
  55.     
  56.  
  57.     
  58.  
  59.    // 删除文件  
  60.  
  61.   public function remove($remote){ 
  62.  
  63.    return $result = @ftp_delete($this->conn_id, $file); 
  64.  
  65.   } 
  66.  
  67.     
  68.  
  69.      
  70.  
  71. }     
  72.  
  73.    
  74.  
  75.    
  76.  
  77.    
  78.  
  79. // 使用  
  80.  
  81. $config = array
  82.  
  83.       'hostname' => 'localhost'
  84.  
  85.    'username' => 'root'
  86.  
  87.    'password' => 'root'
  88.  
  89.    'port' => 21 
  90.  
  91.    
  92.  
  93. ) ; 
  94.  
  95.     
  96.  
  97. $ftp = new Ftp(); 
  98.  
  99. $ftp->connect($config); 
  100.  
  101. $ftp->upload('ftp_err.log','ftp_upload.log'); 
  102.  
  103. $ftp->download('ftp_upload.log','ftp_download.log'); 
  104.  
  105.    
  106.  
  107.    
  108.  
  109.    
  110.  
  111. /*根据上面的三个协议写出基于ssh 的ftp 类 
  112.  
  113. 我们知道进行身份认证的方式有两种:公钥;密码 ; 
  114.  
  115. (1) 使用密码登陆 
  116.  
  117. (2) 免密码登陆也就是使用公钥登陆  
  118.  
  119.    
  120.  
  121. */ 
  122.  
  123.    
  124.  
  125. class sftp{ 
  126.  
  127.      
  128.  
  129.      
  130.  
  131.   // 初始配置为NULL 
  132.  
  133.   private $config =NULL ; 
  134.  
  135.   // 连接为NULL  
  136.  
  137.   private $conn = NULL; 
  138.  
  139.    
  140.  
  141.      
  142.  
  143.   // 是否使用秘钥登陆  
  144.  
  145.    private $use_pubkey_file= false; 
  146.  
  147.      
  148.  
  149.   // 初始化 
  150.  
  151.   public function init($config){ 
  152.  
  153.     $this->config = $config ;  
  154.  
  155.   } 
  156.  
  157.      
  158.  
  159.      
  160.  
  161.   // 连接ssh ,连接有两种方式(1) 使用密码 
  162.  
  163.   // (2) 使用秘钥  
  164.  
  165.   public function connect(){ 
  166.  
  167.        
  168.  
  169.     $methods['hostkey'] = $use_pubkey_file ? 'ssh-rsa' : [] ;  
  170.  
  171.     $con = ssh2_connect($this->config['host'], $this->config['port'], $methods); 
  172.  
  173.     //(1) 使用秘钥的时候  
  174.  
  175.     if($use_pubkey_file){ 
  176.  
  177.     // 用户认证协议 
  178.  
  179.        $rc = ssh2_auth_pubkey_file( 
  180.  
  181.         $conn
  182.  
  183.         $this->config['user'], 
  184.  
  185.         $this->config['pubkey_file'], 
  186.  
  187.         $this->config['privkey_file'], 
  188.  
  189.         $this->config['passphrase'])  
  190.  
  191.       ); 
  192.  
  193.     //(2) 使用登陆用户名字和登陆密码 
  194.  
  195.     }else
  196.  
  197.       $rc = ssh2_auth_password( $conn$this->conf_['user'],$this->conf_['passwd']); 
  198.  
  199.       
  200.  
  201.     } 
  202.  
  203.        
  204.  
  205.     return $rc ;  
  206.  
  207.   } 
  208.  
  209.      
  210.  
  211.      
  212.  
  213.   // 传输数据 传输层协议,获得数据 
  214.  
  215.    public function download($remote$local){ 
  216.  
  217.         
  218.  
  219.      return ssh2_scp_recv($this->conn_, $remote$local); 
  220.  
  221.    } 
  222.  
  223.       
  224.  
  225.    //传输数据 传输层协议,写入ftp服务器数据 
  226.  
  227.    public function upload($remote$local,$file_mode=0664){ 
  228.  
  229.      return ssh2_scp_send($this->conn_, $local$remote$file_mode); 
  230.  
  231.         
  232.  
  233.    } 
  234.  
  235.       
  236.  
  237.    // 删除文件  
  238.  
  239.    public function remove($remote){ 
  240.  
  241.       $sftp = ssh2_sftp($this->conn_); 
  242.  
  243.       $rc = false; 
  244.  
  245.    
  246.  
  247.   if (is_dir("ssh2.sftp://{$sftp}/{$remote}")) { 
  248.  
  249.       $rc = false ; 
  250.  
  251.          
  252.  
  253.       // ssh 删除文件夹 
  254.  
  255.    $rc = ssh2_sftp_rmdir($sftp$remote); 
  256.  
  257.       } else { 
  258.  
  259.      // 删除文件 
  260.  
  261.         $rc = ssh2_sftp_unlink($sftp$remote); 
  262.  
  263.       } 
  264.  
  265.       return $rc
  266.  
  267.          
  268.  
  269.     } 
  270.  
  271.         
  272.  
  273.     
  274.  
  275.     
  276.  
  277.      
  278.  
  279.  
  280.    
  281.  
  282.    
  283.  
  284. $config = [ 
  285.  
  286.  "host"   => "192.168.1.1 ",  // ftp地址 
  287.  
  288.  "user"   => "***",  
  289.  
  290.  "port"   => "22"
  291.  
  292.  "pubkey_path" => "/root/.ssh/id_rsa.pub"// 公钥的存储地址 
  293.  
  294.  "privkey_path" => "/root/.ssh/id_rsa",   // 私钥的存储地址 
  295.  
  296. ]; 
  297.  
  298.    
  299.  
  300. $handle = new SftpAccess(); 
  301.  
  302. $handle->init($config); 
  303.  
  304. $rc = $handle->connect(); 
  305.  
  306. $handle->getData(remote, $local);

Tags: php连接sftp

分享到: