最近公司系统对接,需要用到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的选项是否开启。
第一次发帖,初来乍到,感谢网上的大牛们给我们提供这么多好用的方法,希望可以帮助到大家。