찾다
php教程php手册php 中的sftp 使用教程

php 中的sftp 使用教程

<!--?php  


/**
php 中的sftp 使用教程 
Telnet、FTP、SSH、SFTP、SSL  
(一) ftp 协议简介 

	FTP(File Transfer Protocol,文件传输协议)是互联网上常用的协议之一,人们用FTP实现互连网上的文件传输。
如同其他的很多通讯协议,FTP通讯协议也采用客户机 / 服务器(Client / Server )架构。用户可以通过各种不同的FTP客户端程序,
借助FTP协议,来连接FTP服务器,以上传或者下载文件FTP的命令传输和数据传输是通过不同的端口进行传输的
FTP是TCP/IP的一种具体应用,它工作在OSI模型的第七层,TCP模型的第四层上,即应用层,使用TCP传输而不是UDP,
这样FTP客户在和服 务器建立连接前就要经过一个被广为熟知的三次握手的过程,它带来的意义在于客户与服务器之间的连接是可靠的,
而且是面向连接,为数据的传输提供了可靠 的保证。

(二)ssh协议 

	ssh 的全称为 SecureShell   ,可以报所有的传输数据惊醒加密,这样&#39;中间人&#39;就不能获得我们传输的数据
同事,传输的数据是经过压缩的,可以加快传输的速度.ssh有很多功能,可以替代telnet 也可也为ftppop ,提供一个安全的通道 

   SSH协议框架中最主要的部分是三个协议:
 
* 传输层协议(The Transport Layer Protocol)提供服务器认证,数据机密性,信息完整性 等的支持;
* 用户认证协议(The User Authentication Protocol) 则为服务器提供客户端的身份鉴别;
* 连接协议(The Connection Protocol) 将加密的信息隧道复用成若干个逻辑通道,提供给更高层的应用协议使用; 
  各种高层应用协议可以相对地独立于SSH基本体系之外,并依靠这个基本框架,通过连接协议使用SSH的安全机制。
  
 (三)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[&#39;host&#39;],$this->config[&#39;port&#39;])); 
	}
	
	
	// 传输数据  传输层协议,获得数据 true or false 
   public function download($remote, $local,$mode = &#39;auto&#39;){
	   return $result = @ftp_get($this->conn, $localpath, $remotepath, $mode);
   }
   
   // 传输数据  传输层协议,上传数据 true or false 
   public function upload($remote, $local,$mode = &#39;auto&#39;){
	   return $result = @ftp_put($this->conn, $localpath, $remotepath, $mode);
   }
   
   
  	  // 删除文件  
	public function remove($remote){
	  return  $result = @ftp_delete($this->conn_id, $file);
	}
   
	
}		



// 使用 
$config = array(
			&#39;hostname&#39; => &#39;localhost&#39;,
            &#39;username&#39; => &#39;root&#39;,
            &#39;password&#39; => &#39;root&#39;,
            &#39;port&#39; => 21

) ;
 
$ftp = new Ftp();
$ftp->connect($config);
$ftp->upload(&#39;ftp_err.log&#39;,&#39;ftp_upload.log&#39;);
$ftp->download(&#39;ftp_upload.log&#39;,&#39;ftp_download.log&#39;);



/*根据上面的三个协议写出基于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[&#39;hostkey&#39;] =  $use_pubkey_file ?  &#39;ssh-rsa&#39;  : [] ; 
		$con = ssh2_connect($this->config[&#39;host&#39;], $this->config[&#39;port&#39;], $methods);
		//(1) 使用秘钥的时候 
		if($use_pubkey_file){
		//  用户认证协议
			 $rc = ssh2_auth_pubkey_file(
				$conn,
				$this->config[&#39;user&#39;],
				$this->config[&#39;pubkey_file&#39;],
				$this->config[&#39;privkey_file&#39;],
				$this->config[&#39;passphrase&#39;]) 
			);
		//(2) 使用登陆用户名字和登陆密码
		}else{
			$rc = ssh2_auth_password( $conn, $this->conf_[&#39;user&#39;],$this->conf_[&#39;passwd&#39;]);
            
		}
		
		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);
		

		
/*		
 

성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

VSCode Windows 64비트 다운로드

VSCode Windows 64비트 다운로드

Microsoft에서 출시한 강력한 무료 IDE 편집기

SublimeText3 Linux 새 버전

SublimeText3 Linux 새 버전

SublimeText3 Linux 최신 버전

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

mPDF

mPDF

mPDF는 UTF-8로 인코딩된 HTML에서 PDF 파일을 생성할 수 있는 PHP 라이브러리입니다. 원저자인 Ian Back은 자신의 웹 사이트에서 "즉시" PDF 파일을 출력하고 다양한 언어를 처리하기 위해 mPDF를 작성했습니다. HTML2FPDF와 같은 원본 스크립트보다 유니코드 글꼴을 사용할 때 속도가 느리고 더 큰 파일을 생성하지만 CSS 스타일 등을 지원하고 많은 개선 사항이 있습니다. RTL(아랍어, 히브리어), CJK(중국어, 일본어, 한국어)를 포함한 거의 모든 언어를 지원합니다. 중첩된 블록 수준 요소(예: P, DIV)를 지원합니다.