PHP的ftp文件,多文件上传操作类
admin
2023-06-13 16:22:52
0次

原文博客地址http://xgs888.top/post/view?id=97;

PHP针对ftp文件的操作方法,如果是只操作一个ftp,可以使用里面的单利模式,

不需要每次都去实例化,我的项目中需要去链接很多个ftp服务器;

所以需要多次去连接和关闭;

ftp = @ftp_connect($config['ftp_ip'],$config['ftp_port']) or die("FTP connection fail");
       //登录验证
       @ftp_login($this->ftp,$config['ftp_username'],$config['ftp_password']);
       //是否开启被动模式
        if (isset($config['ftp_pasv']))
        {
            @ftp_pasv($this->ftp,true);
        }
    }

    /**
     * Created by PhpStorm.
     * function: getInstance
     * Description:公有的静态方法
     * User: Xiaoxie
     * Email 736214763@qq.com
     * @return FtpFile|null
     *
     */
    static public function getInstance($config){
        if(!(self::$_instance instanceof self)){
            self::$_instance = new FtpFile($config);
        }
        return self::$_instance;
    }

    /**
     * Created by PhpStorm.
     * function: up_file
     * Description:上传文件
     * User: Xiaoxie
     * Email 736214763@qq.com
     * @param $path 本地路径
     * @param $newpath  若目标目录不存在则新建
     * @param bool $type
     *
     */
    function up_file($path,$newpath,$type=true)
    {
        if($type) $this->dir_mkdirs($newpath);
        $this->off = @ftp_put($this->ftp,$newpath,$path,FTP_BINARY);
        if(!$this->off)
        {
            return "文件上传失败,请检查权限及路径是否正确!";
        }else{
            //删除文件
            unlink($path);
            return true;
        }
    }

    /**
     * Created by PhpStorm.
     * function: uploadFile
     * Description:多文件上传
     * User: Xiaoxie
     * Email 736214763@qq.com
     * @param array $files
     * @param bool $type
     * @return bool|void
     *
     */
    public function uploadFile($files=[],$type=true)
    {
        if (is_array($files))
        {
            foreach ($files as $key=>$file)
            {
                if($type)
                {
                    $this->dir_mkdirs($file);
                }
                $this->off = @ftp_put($this->ftp,$file,$key,FTP_BINARY);
                if(!$this->off)
                {
                     logs('ftp.txt',date('Y-m-d H:i:s').$file."文件上传错误");
                }else{
                    //删除文件
                    unlink($key);
                   // return true;
                }
            }
        }
        if(!$this->off)
        {
            //logs函数自定义日志
            logs('ftp.txt',date('Y-m-d H:i:s').$file."文件上传错误");
            return false;
        }else{
            return true;
        }
    }

    /**
     * Created by PhpStorm.
     * function: move_file
     * Description:移动文件 修改文件名
     * User: Xiaoxie
     * Email 736214763@qq.com
     * @param $path 原路径
     * @param $newpath 若目标目录不存在则新建
     * @param bool $type
     *
     */
    function move_file($path,$newpath,$type=true)
    {
        if($type) $this->dir_mkdirs($newpath);
        $this->off = @ftp_rename($this->ftp,$path,$newpath);
        if(!$this->off) {
            return "文件移动失败,请检查权限及原路径是否正确!";
        }else{
            return true;
        }
    }

    /**
     * Created by PhpStorm.
     * function: copy_file
     * Description:复制文件
     * User: Xiaoxie
     * Email 736214763@qq.com
     * @param $path原路径
     * @param $newpath 新路径
     * @param bool $type 若目标目录不存在则新建
     *
     */
    function copy_file($path,$newpath,$type=true)
    {
        $downpath = "/var/www/temp.txt";
        $this->off = @ftp_get($this->ftp,$downpath,$path,FTP_BINARY);// 下载 
        if(!$this->off) 
        {
            return "文件复制失败,请检查权限及原路径是否正确!";
        }
        $this->up_file($downpath,$newpath,$type);
    }

    /**
     * Created by PhpStorm.
     * function: del_file
     * Description:删除文件
     * User: Xiaoxie
     * Email 736214763@qq.com
     * @param $path
     *
     */
    function del_file($path)
    {
        $this->off = @ftp_delete($this->ftp,$path);
        if(!$this->off){
            return false;
        }
    }

    /**
     * Created by PhpStorm.
     * function: dir_mkdirs
     * Description:生成目录
     * User: Xiaoxie
     * Email 736214763@qq.com
     * @param $path 路径
     *
     */
    function dir_mkdirs($path)
    {
        $path_arr = explode('/',$path);       // 取目录数组 
        $file_name = array_pop($path_arr);      // 弹出文件名
        $path_div = count($path_arr);        // 取层数 

        foreach($path_arr as $val)          // 创建目录 
        {
            if(@ftp_chdir($this->ftp,$val) == FALSE)
            {
                $tmp = @ftp_mkdir($this->ftp,$val);
                if($tmp == FALSE)
                {
                    
                    exit;
                }
                @ftp_chdir($this->ftp,$val);
            }
        }

        for($i=1;$i<=$path_div;$i++)         // 回退到根 
        {
            @ftp_cdup($this->ftp);
        }
    }

    /**
     * Created by PhpStorm.
     * function: close
     * Description:关闭链接
     * User: Xiaoxie
     * Email 736214763@qq.com
     *
     */
    public function close()
    {
        @ftp_close($this->ftp);
    }

    /**
     * 关闭链接
     *单例模式打开析构方法
     */

    public function __destruct()
    {
        // TODO: Implement __destruct() method.
        //@ftp_close($this->ftp);
    }

}


lavarel中直接调用;

单例模式调用:

FtpFile::getInstance($this->data)->up_file($location_file,$remote_file);

不是单例模式调用;

$ftp = new FtpFile($this->data);
$ftp->uploadFile($filearr);
$ftp->close();


相关内容

热门资讯

空调连续工作多久需要停机休息 空调连续工作的时间取决于多个因素,包括空调的型号、功率、使用环境和维护情况等。一般来说,空调可以连续...
空调哪个符号是除湿的 空调除湿功能通常用一个水滴形状的符号表示。不同品牌和型号的空调遥控器可能会有所差异,但一般来说,除湿...
格力空调多长时间加一次氟利昂 1、一般情况下,空调对氟利昂的使用量是非常小的,所以在空调使用了四年左右的时候再考虑加也没问题。2、...
空调用多长时间需要加氟一次 一般情况下是五年。当出现以下这几种情况时,空调才需要加氟。1、空调的室内机和室外机各有两个接口,当接...
格调生活·C标思享荟:卡萨帝在... 9月12日的郑州龙湖金融岛,夜风轻拂,灯光璀璨。“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑...
品牌价值破千亿、高端份额持续领... 9月12日,“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑州站”在郑州龙湖金融岛举办。2026...
空调主板坏了修800还是换新的 空调主板坏了是修还是换新,需要考虑多个因素,以下是一些建议:1. 维修成本:如果维修费用较低,比如 ...
空调开多久需要休息多长时间 问题:空调开多久需要休息多长时间回答:1、在使用空调的过程中,一般空调开7~8个小时左右需要休息2~...
中央空调多长时间清洗一次 1、一般空调开机前清洗一次即可,空调开机中间时段再清洗一次,空调关机时清洗一次,这样比较合理。2、空...
中央空调氟利昂多久加一次 看空调制热和制冷程度,很多人的观点认为氟利昂必须一年放一次,其实这个观点是错误的,理解上面有点偏差,...