程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> php中使用sftp教程

php中使用sftp教程

編輯:關於PHP編程

     這篇文章主要介紹了php中使用sftp教程,本文講解了ftp 協議簡介、ssh協議、sftp 協議等知識,並給出了FTP和SFTP操作類實現代碼,需要的朋友可以參考下

        ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 <?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 ,可以報所有的傳輸數據驚醒加密,這樣'中間人'就不能獲得我們傳輸的數據 同事,傳輸的數據是經過壓縮的,可以加快傳輸的速度.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['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);  
    1. 上一頁:
    2. 下一頁:
    Copyright © 程式師世界 All Rights Reserved