之前看过几篇关于php中实现sftp操作的文章,原理都是利用ssh扩展,但是自己用了之后效果不是很理想,遂转向了开源产品。今天向大家介绍一个开源库phpseclib,并贴一段代码。
在利用该库进行sftp操作之前,首先需要将库文件下载下来,具体下载有劳各位百度一下。
源代码下载下来之后,放到当前工程的存放库文件的文件夹下面,在本例子中是'lib'。
接下来,为了方便修改,建立一个sftp主机的配置文件SFTPConf.php
define('CONF_SFTP', 'sftpConf');
$sftpConf = array('server'=>'****','port'=>'22','username'=>'****','password'=>'****');
为了方便使用sftp,考虑构造一个工具类SftpUtil.php,并且将该文件放到‘util’文件夹下面
class SftpUtil {
public static function getSftp(){
$sftpconf = DIR_CONF . DS . 'SFTPConf.php';
if (file_exists($sftpconf)) {
require_once $sftpconf;
} else {
die('Can not load Conf : ' . $sftpconf . ' does not exist');
}
$includepath = dirname(dirname(__FILE__)).DS.'lib'.DS.'phpseclib'; //动态添加位于lib文件夹下面的phpseclib库到当前系统includepath
set_include_path(get_include_path() . PATH_SEPARATOR .$includepath);
include('Net/SFTP.php');
$sftpconf = ${CONF_SFTP}; //加载sftp配置文件
$strServer = $sftpconf['server'];
$strServerPort = $sftpconf['port'];
$strServerUsername = $sftpconf['username'];
$strServerPassword = $sftpconf['password'];
$sftp = new Net_SFTP($strServer); //初始化一个sftp实例
for($i = 0;$i<10;$i++){
if ($sftp->login($strServerUsername, $strServerPassword)) { //考虑到网络条件等因素,允许尝试至多10次登录操作
break;
}
else{
if($i==9){
exit('Sftp Login Failed'); //如果10次都登录失败,则退出
}
}
}
return $sftp;
}
} 在需要使用sftp的时候,可以这样使用该类:首先include该SftpUtil.php,之后可以通过SftpUtil::getSftp()获得一个sftp对象,之后可以执行各种sftp操作。具体api参见phpseclib的说明,都很简单,这里我给出几个例子:
put() 上传文件
mkdir() 建立目录
chdir() 切换目录
pwd() 获得当前工作目录
希望能帮到大家