php使用ftp远程上传文件类(解决主从文件同步问题的简单方法)

php使用ftp实现文件上传代码片段:

 <?php  
    /**
     * ftp上传文件类
     */  
    class Ftp {  

        /**
         * 测试服务器
         *  
         * @var array
         */  
        private $testServer = array(  
            'host' => 'ip',  
            'port' => 21,  
            'user' => 'userName',  
            'pwd' => 'password'  
        );  

        /**
         * 打开并登录服务器
         *  
         * @param string $flag 服务器标识test
         * @return mixed  
         *              0:服务器连接失败
         *              1:服务器登录失败
         *              resource 连接标识
         */  
        public function openServer($flag = 'test'){  
            //选择服务器  
            $config = $this->getServerConfig($flag);  

            //连接服务器  
            $connect = ftp_connect($config['host'], $config['port']);  
            if($connect == false) return 0;  

            //登录服务器  
            if(!ftp_login($connect, $config['user'], $config['pwd'])) return 1;  

            //打开被动模式,数据的传送由客户机启动,而不是由服务器开始  
            ftp_pasv($connect, true);  

            //返回连接标识  
            return $connect;  
        }  

        /**
         * 创建目录并将目录定位到当请目录
         *  
         * @param resource $connect 连接标识
         * @param string $dirPath 目录路径
         * @return mixed  
         *              2:创建目录失败
         *              true:创建目录成功
         */  
        public function makeDir($connect, $dirPath){  
            //处理目录  
            $dirPath = '/' . trim($dirPath, '/');  
            $dirPath = explode('/', $dirPath);  
            foreach ($dirPath as $dir){  
                if($dir == '') $dir = '/';  
                //判断目录是否存在  
                if(@ftp_chdir($connect, $dir) == false){  
                    //判断目录是否创建成功  
                    if(@ftp_mkDir($connect, $dir) == false){  
                        return 2;  
                    }  
                    @ftp_chdir($connect, $dir);  
                }  
            }  
            return true;  
        }  

        /**
         * 关闭服务器
         *  
         * @param resource $connect 连接标识
         */  
        public function closeServer($connect){  
            if(!empty($connect)) ftp_close($connect);  
        }  

        /**
         * 上传文件
         *  
         * @param string $flag 服务器标识
         * @param string $local 上传文件的本地路径
         * @param string $remote 上传文件的远程路径
         * @return int  
         *              0:服务器连接失败  
         *              1:服务器登录失败
         *              2:创建目录失败
         *              3:上传文件失败
         *              4:上传成功
         */  
        public function upload($flag = 'test', $local, $remote){  
            //连接并登录服务器  
            $connect = $this->openServer($flag);  
            if(($connect === 0) || ($connect === 1)) return $connect;  

            //上传文件目录处理  
            $mdr = $this->makeDir($connect, dirname($remote));  
            if($mdr === 2) return 2;  

            //上传文件  
            $result = ftp_put($connect, basename($remote), $local, FTP_BINARY);  

            //关闭服务器  
            $this->closeServer($connect);  

            //返回结果  
            return (!$result) ? 3 : 4;  
        }  

        /**
         * 删除文件
         *  
         * @param string $flag 服务器标识
         * @param string $remote 文件的远程路径
         * @return int  
         *              0:服务器连接失败  
         *              1:服务器登录失败
         *              2:删除失败
         *              3:删除成功
         */  
        public function delete($flag = 'test', $remote){  
            //连接并登录服务器  
            $connect = $this->openServer($flag);  
            if(($connect === 0) || ($connect === 1)) return $connect;  

            //删除  
            $result = ftp_delete($connect, $remote);  

            //关闭服务器  
            $this->closeServer($connect);  

            //返回结果  
            return (!$result) ? 2 : 3;  
        }  

        /**
         * 读取文件
         *  
         * @param string $flag 服务器标识
         * @param string $remote 文件的远程路径
         * @return mixed  
         *              0:服务器连接失败  
         *              1:服务器登录失败
         */  
        public function read($flag, $remote){  
            //连接并登录服务器  
            $connect = $this->openServer($flag);  
            if(($connect === 0) || ($connect === 1)) return $connect;  

            //读取  
            $result = ftp_nlist($connect, $remote);  

            //关闭服务器  
            $this->closeServer($connect);  

            //返回结果  
            foreach ($result as $key => $value){  
                if(in_array($value, array('.', '..'))) unset($result[$key]);  
            }  
            return array_values($result);  
        }  

        /**
         * 获取ftp服务器配置
         *  
         * @param string $flag 服务器标识test
         * @return array ftp服务器连接配置
         */  
        private function getServerConfig($flag = 'test'){  
            $flag = strtolower($flag);  
            //测试服务器  
            if($flag == 'test') return $this->testServer;  
            //默认返回测试服务器  
            return $this->testServer;  
        }  
    }
   ?>
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
FTP远程文件同步更新程序 版本:2.1.0.0 新版本v2.1.0.0改动 1.解决了2G以上文件传输时的bug,能够正确比对传输大型文件。 2.支持了程序启动后自动开始同步操作的功能。 3.修正了前版本中的多处bug,进一步提高了长时间无人值守状态下运行的稳定性。 --------------------------------------------------------------------------------------- 版本v2.0.0.0改动 1.程序新增多任务传输功能,通过该功能用户同时可将本地多处不同点的文件服务器不同目录下上传。 2.自动同步的时间间隔最短可以设置为1分钟。 3.修正了前版本中的多处bug,极大的提高了长时间无人值守状态下运行的稳定性。 --------------------------------------------------------------------------------------- 版本v1.1.0.0改动 1.程序新增支持同步传输子文件夹的功能。 2.修正了前版本中的多处bug,当同步上传大量文件时程序更加稳定。 --------------------------------------------------------------------------------------- 版本v1.0.0.0 1.本程序实现了自动定时检测本地指定文件夹内文件是否更新,如果发生了更新或者添加,则 自动将更新或者添加的文件通过FTP传输到远程电脑指定的文件夹中的功能。用户可对检测间隔时 间,上传文件型进行设置。程序同时记录了详细的传输日志。 2.如果远程文件夹中的文件出现了丢失,可以通过删除传输日志内的相关记录,重新上传该文 件。如果清空传输日志,程序则自动判定所有指定文件都做出了更新,并且重新上传所有指定 文件,同时再次写入传输日志。 3.第一次运行本程序之后,请先进入参数设置界面设置相关传输参数。 4.由于本程序建立在FTP传输协议的基础上运作,没有FTP服务器的用户可以通过使用FTP服务器 架构软件轻松架构FTP服务器,从而达到使用本程序自动定时向FTP服务器上传更新的文件的功能。 ---------------------------------------------------------------------------------------
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

任聪聪

创作不易,你的打赏是我的动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值