PHP ssh链接sftp上传下载

<?php
//需要开启 php_ssh2 扩展。安装扩展后 php.ini 里添加 extension=ssh2
class Sftp {
    // 连接为NULL
    private $conn = NULL;

    // 是否使用秘钥登陆
    private $usePubKey= false;

    //sftp 句柄
    private $sftp = NULL;

    /**
     *  构造函数.
     */
    public function __construct(){
        $sftp_config = array(
            "host"        => "",                // SFTP服务器ip地址
            "username"    => "",                // SFTP服务器用户名
            "password"    => "",                // SFTP服务器密码(有密码就不用提供公钥,秘钥)
            "port"        => "22",              // SFTP服务器端口号
            "pubkeyfile"  => "id_rsa_logo.pub", // SFTP服务器秘钥文件
            "privkeyfile" => "id_rsa_logo",     // SFTP服务器公钥文件
            "passphrase"  => ""                 // 密码短语
        );

        $methods[hostkey] = $this->usePubKey ? ssh-rsa : [] ;
        $this->conn = ssh2_connect($sftp_config[host], $sftp_config[port], $methods);

        if($this->usePubKey){ // 使用秘钥登录
            ssh2_auth_pubkey_file($this->conn, $sftp_config[username], $sftp_config[pubkeyfile], $sftp_config[privkeyfile], $sftp_config[passphrase]);
            $this->sftp = ssh2_sftp($this->conn);
        }else{ // 使用用户名和密码登录
            ssh2_auth_password( $this->conn, $sftp_config[username], $sftp_config[password]);
            $this->sftp = ssh2_sftp($this->conn);
        }
    }

    // 下载文件
    public function download($remotFile = /testdir/test.php, $localFile = /data/sftp_file/test.php){
        return copy("ssh2.sftp://{$this->sftp}" . $remotFile, $localFile); // 有可能报502错误,如报错则使用下面语句
        return copy("ssh2.sftp://" . intval($this->sftp) . $remotFile, $localFile);
    }

    // 文件上传
    public function upload($remotFile = /testdir/test.php, $localFile = /data/sftp_file/test.php){ //, $file_mode = 0777
        return copy($localFile, "ssh2.sftp://{$this->sftp}" . $remotFile); // 有可能报502错误,如报错则使用下面语句
        return copy($localFile, "ssh2.sftp://" . intval($this->sftp) . $remotFile);
    }

    // 创建目录
    public function mkdir($remotPath = "/testdir/testdir2/testdir3/"){
        //可直接创建多级目录
        ssh2_sftp_mkdir($this->sftp, $remotPath, 0777, true);
    }

    // 改变目录或文件权限
    public function chmod($remotPath = "/testdir/testdir2/testdir3/"){
        ssh2_sftp_chmod ($this->sftp, $remotPath, 0755);
    }

    // 判段目录或者文件是否存在
    public function exits($remotPath = "/testdir/testdir2/testdir3/"){
        return file_exists("ssh2.sftp://{$this->sftp}" . $remotPath); // 有可能报502错误,如报错则使用下面语句
        return file_exists("ssh2.sftp://" . intval($this->sftp) . $remotPath);
    }
}



$this      = new Sftp();
$remotPath = "/testdir/"; // 远程路径
$localPath =  __DIR__ . "/data/sftp_file/"; // 本地文件路径;


//上传文件
// 判断远程路径是否存在
$exits = $this->exits($remotPath);

// 如果目录不存在,创建目录
if (!$exits) {
    $this->mkdir($remotPath);
}
//上传到sftp
$this->upload($remotPath . test.txt, $localPath . test.txt);

//下载文件
//判断远程文件是否存在
$exits = $this->exits($remotPath . test.txt);
//如果不存在
if (!$exits) {
    echo "文件不存在无法下载";
    die;
}
$this->download($remotPath.test.txt, $localPath.test.txt);

 

PHP ssh链接sftp上传下载

上一篇:在浏览器中输入URL后发生的全部过程。(一次完整的http请求过程)


下一篇:微信公众号js调起支付代码中不要使用var