眨读

文章 分类 标签
10 5 7

公告

此处是站点公告

PHP SFTP实现上传下载功能

星夜 2021-09-07 726 0条评论 PHP Sftp

首页 / 正文

一、SFTP介绍:

使用SSH协议进行FTP传输的协议叫SFTP(安全文件传输)Sftp和Ftp都是文件传输协议。区别:sftp是ssh内含的协议(ssh是加密的telnet协议), 只要sshd服务器启动了,它就可用,而且sftp安全性较高,它本身不需要ftp服务器启动。 sftp = ssh + ftp(安全文件传输协议)。由于ftp是明文传输的, 没有安全性,而sftp基于ssh,传输内容是加密过的,较为安全。目前网络不太安全,以前用telnet的都改用ssh2(SSH1已被破解)。

sftp这个工具和ftp用法一样。但是它的传输文件是通过ssl加密了的,即使被截获了也无法破解。而且sftp相比ftp功能要多一些,多了一些文件属性的设置。

二、SSH2扩展配置

下载地址:http://windows.php.net/downloads/pecl/releases/ssh2/0.12/
phpinfo7.4.png
ssh2_php7.4.png

  1. 解压完后,会有三个文件,libssh2.dll、php_ssh.dll、php_ssh2.pdb。
  2. 将 php_ssh.dll、php_ssh2.pdb 放到你的 php 扩展目录下 php/ext/ 下。
  3. 将libssh2.dll 复制到 c:/windows/system32 和 c:/windows/syswow64 各一份
  4. 在 php.ini中加入 extension=php_ssh2.dll
  5. 重启Apache, 打印phpinfo(); 会出现 SSH2 扩展,表示安装成功
namespace app\common\lib\category;

class Sftp
{
    private $conn    = NULL;// 连接为NULL
    private $ressftp = NULL; //sftp resource

    // 初始化,$config是sftp的连接信息
    public function __construct($config)
    {
        if (!$this->ressftp) {
            $this->conn = ssh2_connect($config['host'], $config['port']);
            if (ssh2_auth_password($this->conn, $config['user'], $config['pass'])) {
                $this->ressftp = ssh2_sftp($this->conn);//启动引力传动系统
            } else {
                echo("用户名或密码错误");
                die();
            }
        }
        return $this->ressftp;
    }

    /**
     * 判段远程目录是否存在
     * @param $dir /远程目录
     * @return bool
     */
    public function ssh2_dir_exits($dir)
    {
        return file_exists("ssh2.sftp://" . intval($this->ressftp) . $dir);
    }

    /**
     * 下载文件
     * @param $remote /远程文件地址
     * @param $local /下载到本地的地址
     * @return bool
     */
    public function downSftp($remote, $local)
    {
        return copy("ssh2.sftp://" . intval($this->ressftp) . $remote, $local);
    }

    /**
     * 文件上传
     * @param $local /本地文件地址
     * @param $remote /上传后的文件地址
     * @param int $file_mode
     * @return bool
     */
    public function upSftp($local, $remote, $file_mode = 0777)
    {
        return copy($local, "ssh2.sftp://" . intval($this->ressftp) . $remote);
    }

    /**
     * 删除远程目录中文件
     * @param $file
     * @return bool
     */
    public function deleteSftp($file)
    {
        return ssh2_sftp_unlink($this->ressftp, $file);
    }

    /**
     * 遍历远程目录
     * @param $remotePath
     * @return array
     */
    public function fileList($remotePath)
    {
        $fileArr = scandir('ssh2.sftp://' . intval($this->ressftp) . $remotePath);
        foreach ($fileArr as $k => $v) {
            if ($v == '.' || $v == '..') {
                unset($fileArr[$k]);
            }
        }
        return $fileArr;
    }

    /**
     * 创建远程目录中文件夹
     * @param $file
     * @return bool
     */
    public function ssh2_sftp_mkdir($dir)
    {
        return ssh2_sftp_mkdir($this->ressftp, $dir);
    }
}

评论(0)

当前没有评论,还不快来留下第一个脚印吧

推荐关键字: Git OSS cURL ftp Sftp File ThinkPHP

上一张 下一张