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


Posted in PHP onSeptember 23, 2016

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; 
    } 
  }
  ?>

以上就是小编为大家带来的php使用ftp远程上传文件类(完美解决主从文件同步问题的方法)的全部内容了,希望对大家有所帮助,多多支持三水点靠木~

PHP 相关文章推荐
用php实现批量查询清除一句话后门的代码
Jan 20 PHP
ecshop 批量上传(加入自定义属性)
Mar 20 PHP
深入PHP curl参数的详解
Jun 17 PHP
详解PHP导入导出CSV文件
Nov 03 PHP
Laravel 5 框架入门(二)构建 Pages 的管理功能
Apr 09 PHP
Zend Framework开发入门经典教程
Mar 23 PHP
php ajax实现文件上传进度条
Mar 29 PHP
PHP记录和读取JSON格式日志文件
Jul 07 PHP
PHP实现腾讯与百度坐标转换
Aug 05 PHP
PHP运用foreach神奇的转换数组(实例讲解)
Feb 01 PHP
PHP的PDO大对象(LOBs)
Jan 27 PHP
laravel-admin自动生成模块,及相关基础配置方法
Oct 08 PHP
thinkphp制作404跳转页的简单实现方法
Sep 22 #PHP
thinkphp3.2.3版本的数据库增删改查实现代码
Sep 22 #PHP
thinkphp中多表查询中防止数据重复的sql语句(必看)
Sep 22 #PHP
thinkphp多表查询两表有重复相同字段的完美解决方法
Sep 22 #PHP
php的api数据接口书写实例(推荐)
Sep 22 #PHP
thinkphp跨库操作的简单代码实例
Sep 22 #PHP
一个简单的php MVC留言本实例代码(必看篇)
Sep 22 #PHP
You might like
PHP利用hash冲突漏洞进行DDoS攻击的方法分析
2015/03/26 PHP
目前流行的JavaScript库的介绍及对比
2013/09/29 Javascript
浅谈Javascript 执行顺序
2013/12/18 Javascript
node.js中的fs.stat方法使用说明
2014/12/16 Javascript
javascript实现禁止复制网页内容汇总
2015/12/30 Javascript
js中获取时间new Date()的全面介绍
2016/06/20 Javascript
BootStrap 轮播插件(carousel)支持左右手势滑动的方法(三种)
2016/07/07 Javascript
javascript设计模式之模块模式学习笔记
2017/02/15 Javascript
JS判断时间段的实现代码
2017/06/14 Javascript
node.js中axios使用心得总结
2017/11/29 Javascript
jQuery替换节点元素的操作方法
2018/03/18 jQuery
基于jQuery ztree实现表格风格的树状结构
2018/08/31 jQuery
Vuex持久化插件(vuex-persistedstate)解决刷新数据消失的问题
2019/04/16 Javascript
Vue中图片Src使用变量的方法
2019/10/30 Javascript
extjs图表绘制之条形图实现方法分析
2020/03/06 Javascript
es6函数name属性功能与用法实例分析
2020/04/18 Javascript
vue pages 多入口项目 + chainWebpack 全局引用缩写说明
2020/09/21 Javascript
Python专用方法与迭代机制实例分析
2014/09/15 Python
python连接MySQL数据库实例分析
2015/05/12 Python
Python中线程的MQ消息队列实现以及消息队列的优点解析
2016/06/29 Python
详解使用python的logging模块在stdout输出的两种方法
2017/05/17 Python
Pycharm远程调试openstack的方法
2017/11/21 Python
python2与python3中关于对NaN类型数据的判断和转换方法
2018/10/30 Python
python 求1-100之间的奇数或者偶数之和的实例
2019/06/11 Python
如何打包Python Web项目实现免安装一键启动的方法
2020/05/21 Python
基于Python的接口自动化读写excel文件的方法
2021/01/15 Python
HTML5 和小程序实现拍照图片旋转、压缩和上传功能
2018/10/08 HTML / CSS
新西兰最大的在线设计师眼镜店:SmartBuyGlasses新西兰
2017/10/20 全球购物
俄罗斯在线水暖商店:Perfecto.ru
2019/10/25 全球购物
小学五一劳动节活动总结
2015/02/09 职场文书
社区青年志愿者活动总结
2015/05/06 职场文书
领导欢送会主持词
2015/07/06 职场文书
祝福语集锦:送给闺蜜的生日祝福语
2019/10/08 职场文书
Spring Bean是如何初始化的详解
2022/03/22 Java/Android
Win11怎么跳过联网验机 ?Win11跳过联网验机激活教程
2022/04/05 数码科技
解决 redis 无法远程连接
2022/05/15 Redis