ssh连接,上传文件,读取目录,下载文件

1.自己写写的一个ssh连接操作文件及文件夹,记录一下,有错误或不足的地方欢迎大家提出,方便进行修改,谢谢!

<?php 
/**
 * Class File
 * file  文件管理
 */
class File extends MY_Controller {
    private $connection;
    private $sftp;
    public function __construct()
    {
        parent::__construct();
        @ob_clean() ;
        @session_start() ;
        $this->sft_login();
    }
    /**
     *功能:文件列表
     *User:qiangzi Date:2020-05-12 Time:10:28
     */
    function ajax_list(){
        if(!isset($_SESSION['username']) || empty($_SESSION['username'])){
            exit(result_to_towf('', 400, '请求失败,请登录后再试。'));
        }
        //$mr_path='/home/'.$_SESSION['username'];
        $path = '/';
        $type = 'nlist';
        if(isset($_GET['path']) || !empty($_GET['path'])){
            $path = $_GET['path'];
        }
        if(isset($_GET['type']) || !empty($_GET['type'])){
            $type = $_GET['type'];
        }
        $am_ftp_rawlist_array = array();

        $sftp1 = $this->sftp;
        if($type=='mkdir'){
            if(!isset($_GET['dir_name']) || empty($_GET['dir_name'])){
                exit(result_to_towf('', 400, '文件夹名称不能为空'));
            }
            $mkdir_path = '/home/'.$_SESSION['username'].$path.'/'.$_GET['dir_name'];
            $res = $this->mkdir($sftp1,$mkdir_path);
            if($res){
                exit(result_to_towf('', 200, '创建成功'));
            }else{
                exit(result_to_towf('', 400, '创建失败'));
            }
        }elseif ($type=='attribute'){
            $del_path = '/home/'.$_SESSION['username'].$path;
            $res = $this->attribute($sftp1,$del_path);
            if($res){
                exit(result_to_towf($res, 200, '获取成功'));
            }else{
                exit(result_to_towf('', 400, '获取失败'));
            }

        }elseif ($type=='show'){
            $res = $this->get_contents($sftp1,$path);
            if($res){
                if(!empty($res)){
                    $res = str_replace( "\n", "<br/>", $res);
                }
                exit(result_to_towf($res, 200, '获取成功'));
            }else{
                exit(result_to_towf('', 400, '暂无数据'));
            }
        }elseif ($type=='del'){
            $del_path = '/home/'.$_SESSION['username'].$path;
            $res = $this->del_file($sftp1,$del_path);
            if($res){
                exit(result_to_towf('', 200, '删除成功'));
            }else{
                exit(result_to_towf('', 400, '删除失败'));
            }
        } else{
//            if($path=='/'){
//                $path='/';
//            }
            //$am_ftp_rawlist = scandir($mr_path.$path);//读取目录
            $handle = opendir('ssh2.sftp://'.intval($sftp1).'/home/'.$_SESSION['username'].$path);
            $am_ftp_rawlist=array();
            while(false != ($entry = readdir($handle))){
                $am_ftp_rawlist[] = $entry;
            }
            closedir($handle);
            $superior_path='/';
            if($path!='/'){
                $superior_path = substr($path,0,strrpos($path,'/'));
            }
            $am_ftp_rawlist_array[0]['dirfilename']=$path; //文件夹名称
            $am_ftp_rawlist_array[0]['file_type']='dir';
            $am_ftp_rawlist_array[0]['can_open']='y';
            $am_ftp_rawlist_array[0]['path']=$superior_path;
            $am_ftp_rawlist_array[0]['name']='..';
            if(!empty($am_ftp_rawlist)){
                foreach ($am_ftp_rawlist as $key => $val) {
                    $row = functions::Grawlistline($val);
                    if(!in_array($row['dirfilename'], array('.', '..')) && substr($row['dirfilename'],0,1)!='.' && strpos($row['dirfilename'],'/.')===false)
                    {
                        $am_ftp_rawlist1 = strstr($row['dirfilename'],'.');
                        if($am_ftp_rawlist1===false){
                            $row['file_type']='dir';
                        }else{
                            $row['file_type']='file';
                        }
                        $row['can_open']=($row['file_type'] == 'dir') ? 'y':'n';
                        if(substr($path,-1)!='/'){
                            $row['path']=$path.'/'.$row['dirfilename'];
                        }else{
                            $row['path']=$path.$row['dirfilename'];
                        }

                        $row['name']=$row['dirfilename'];
                        $am_ftp_rawlist_array[] = $row;
                    }
                }
            }
            exit(result_to_towf($am_ftp_rawlist_array, 200, '请求成功'));
        }
        exit(result_to_towf('', 400, '请求失败'));
    }
    /**
     *功能:sftp连接
     * @throws Exception
     *User:qiangzi
     *Date:2020/7/2 Time:11:55
     */
    public function sft_login(){
        if(!isset($_SESSION['uid']) || empty($_SESSION['uid'])){
            return false;
        }
        $info = $this->M_user->getOneUser($_SESSION['uid'],'user_name,ssh_pass');
        if(empty($info)){
            return false;
        }
        $ssh_pass = AES_ADMIN::decrypt($info['ssh_pass']);//ssh密码解密
        $this->connection = ssh2_connect(SSH_HOST, SSH_PORT);
        if(ssh2_auth_password($this->connection, $info['user_name'], $ssh_pass)) {
            $this->sftp = ssh2_sftp($this->connection);
            return true;
        }else{
            return false;
        }
    }

    /**
     *功能:写文件
     *User:qiangzi
     *Date:2020/7/3 Time:16:39
     */
    public function edit_file(){
        $sftp1 = $this->sftp;
        $counts = $_POST['counts'];
        $mr_path='/home/'.$_SESSION['username'];
        $path = $_POST['path'];
        $stream = fopen("ssh2.sftp://".intval($sftp1).$mr_path.$path, 'w+');
        fwrite($stream, $counts);
        fclose($stream);
    }
    /**
     *功能:删除文件
     * @param $sftp1
     * @param $path
     * @return bool
     * *User:qiangzi
     *Date:2020/7/3 Time:16:04
     */
    public function del_file($sftp1,$path){
        return ssh2_sftp_unlink($sftp1, $path);
    }
    /**
     *功能:创建目录
     * @param $sftp1
     * @param $path
     * @return bool
     * *User:qiangzi
     *Date:2020/7/3 Time:16:04
     */
    public function mkdir($sftp1,$path){
        return ssh2_sftp_mkdir($sftp1, $path);//创建目录
    }

    /**
     *功能:获取文件属性
     * @param $sftp1
     * @param $path
     * @return array
     * User:qiangzi
     * Date:2020/7/3 Time:16:04
     */
    public function attribute($sftp1,$path){
        $data = array();
        $data['type'] = filetype("ssh2.sftp://".intval($sftp1).$path);
        $data['size'] = filesize("ssh2.sftp://".intval($sftp1).$path).' bytes';
        $data['up_time'] = date("Y-m-d H:i:s",filemtime("ssh2.sftp://".intval($sftp1).$path));
        return $data;
    }

    /**
     *功能:获取文件内容
     * @param $sftp1
     * @param $path
     * @return false|string
     * User:qiangzi
     *Date:2020/7/3 Time:16:04
     */
    public function get_contents($sftp1,$path){
        return file_get_contents("ssh2.sftp://".intval($sftp1).$path);
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值