PHP 串連sftp 實現檔案上傳與下載

來源:互聯網
上載者:User
這篇文章介紹的內容是關於PHP 串連sftp 實現檔案上傳與下載,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下

最近開發一個與銀行合作的項目,需要上傳與下載檔案。對檔案保密有一定要求,所以用了SFTP。但實際開發中,遇到了很多問題,網上找的教程與案例都不能用,也是千遍一律 的,複製來,複製去的。最後在不斷的調試後終於實現了PHP的檔案上傳與下載。現記錄下來,僅供參考。

1.檢查PHP版本,下載對應ssh2 擴充 https://windows.php.net/downloads/pecl/releases/ssh2/ ,具體安裝,麻煩網上搜尋一下。phpinfo()檢查是否安裝好。安裝成功後,可以看到ssh2.

2. 網上提供的上傳下截方法 (相信你肯定看到過)

<·?·php//php環境中必須有ssh·$strServer = "伺服器ip";//伺服器ip·$strServerPort = "22";//連接埠號碼·$strServerUsername = "***";//使用者名稱·$strServerPassword = "***";//密碼·//connect to server·$resConnection = ssh2_connect($strServer, $strServerPort);·if(ssh2_auth_password($resConnection, $strServerUsername, $strServerPassword)){·//初始化 SFTP·$resSFTP = ssh2_sftp($resConnection);·echo $resSFTP;·//下載檔案·//1·$filename = 'D:\down'.time().'.txt';·$opts = array(·'http'=>array(·'method'=>"GET",·'timeout'=>60,·)·);·$context = stream_context_create($opts);·$strData = ·file_get_contents("ssh2.sftp://{$resSFTP}/var/testfile/abc.txt", false, $context);·file_put_contents($filename, $strData);·//2 也可以用copy()·//if(!copy("ssh2.sftp://{$resSFTP}/dfr508/WUN/ikea-logo.jpg", $filename)) {·// echo 'download failed';·//}·//--------------------------------------------------------------------------------------------------------------·//上傳檔案·//1·//file_put_contents("ssh2.sftp://{$resSFTP}/var/testfile/456.txt", 'D:/ab.txt');·//2也可以用copy()·if(!copy("d:/ab.txt", "ssh2.sftp://{$resSFTP}/var/testfile/up".time().".txt")) {·echo 'upload failed';·}·} else {·echo "無法在伺服器進行身分識別驗證";·}·?·>

但是我自己按照網上的教程,怎麼也實現 不了,最後只好一步步排查原因。

         $strServer = "";//伺服器ip                  $strServerPort = "";//連接埠號碼              $strServerUsername = "";//使用者名稱              $strServerPassword = "";//密碼             //1串連伺服器                   $resConnection = ssh2_connect($strServer, $strServerPort);                 //2驗證連                 if(ssh2_auth_password($resConnection, $strServerUsername, $strServerPassword)){                     //3初始化 SFTP                     $resSFTP = ssh2_sftp($resConnection);

首先前面3步是沒有問題的

用copy ,file_get_content ,curl 方法實現上傳下載都 報502錯誤 。檢查了路徑等問題,也沒問題 ,但就是不能成功。

後面推斷sftp伺服器上的檔案地址不能訪問。

"ssh2.sftp://{$resSFTP}/var/testfile/abc.txt"

現在只有找到真正可用的地址才行,查看了很多資料,最後在PHP手冊上找到了


ssh2_sftp_realpath 檢查檔案真實路徑,最後返回串連上SFTP後訪問檔案的地址。傳入"ssh2.sftp://{$resSFTP}/var/testfile/abc.txt"

會報錯,說明這個地址是錯的。最後檢查出上傳,下載地址不需要加上前面的

sh2.sftp://{$resSFTP}

直接用SFTP檔案路徑。

上傳使用的函數也不能用 前面 提到的 copy ,file_get_content ,curl

需要用

ssh2_scp_send 上傳

ssh2_scp_recv 下載

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.