最近公司系統對接,需要用到sftp,因為公司原來的都是ftp,所以我只得重新找新方法,我發現thinkphp只有ftp操作類,並沒有現成的sftp操作類,后來我在網上找到一個叫做phpseclib的php開源庫,經過實踐驗證,確實挺好用的。所以大家可以去網上下載一下這個包。
我們下載完以后得到一個Net文件夾,可以把包解壓放在跟你的php文件同級的目錄。如下圖
我們在sftp.class.php這個文件中可以編寫如下代碼。
<?php
date_default_timezone_set('PRC');
header("Content-Type: text/html; charset=utf-8");
class Sftp{
public function getSftp(){
$sftpconf = array('server'=>"****",
'port'=>'22',
'username'=>'****',
'password'=>'****');
//動態添加phpseclib庫
$includepath = dirname(dirname(__FILE__)).DS.'lib'.DS.'phpseclib';
set_include_path(get_include_path() . PATH_SEPARATOR .$includepath);
//加載sftp配置文件
require_once '/Net/SFTP.php';
$strServer = $sftpconf['server'];
$strServerPort = $sftpconf['port'];
$strServerUsername = $sftpconf['username'];
$strServerPassword = $sftpconf['password'];
//初始化一個sftp實例
$sftp = new Net_SFTP($strServer);
if ($sftp->login($strServerUsername, $strServerPassword)) {
echo '登錄成功!';
break;
}else{
exit('登錄失敗!');
}
return $sftp;
}
這樣我們就可以通過調用這個類,登錄sftp了,如果你擔心sftp連接性不是很好,你可以加上if條件循環調用多次,直到連接成功。
另外Net文件夾里面有個SFTP.php文件,里面包含了一些關於這個類的方法。一些常用的:
put()方法,上傳文件,需要注意的一點是如果上傳的是本地目錄的文件,put()有一個參數$mode='NET_SFTP_LOCAL_FILE'一定要加上,因為它默認的參數$mode='NET_SFTP_STRING'。
get()方法,下載文件,沒什么特殊的。
rename()方法,重命名文件,mkdir(),chdir(),rmdir()等等這些目錄操作,我覺得跟linux上面大相徑庭,類里面都有介紹。
當然如果你以前沒有用過ftp,sftp的話,在使用之前一定要記住打開php.ini查看ssh的選項是否開啟。
第一次發帖,初來乍到,感謝網上的大牛們給我們提供這么多好用的方法,希望可以幫助到大家。