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 相关文章推荐
用户的详细注册和判断
Oct 09 PHP
用PHP实现将GB编码转换为UTF8
Nov 25 PHP
php 文件状态缓存带来的问题
Dec 14 PHP
php 错误处理经验分享
Oct 11 PHP
解析PHP将对象转换成数组的方法(兼容多维数组类型)
Jun 21 PHP
PHP分页类集锦
Nov 18 PHP
phpstorm配置Xdebug进行调试PHP教程
Dec 01 PHP
在openSUSE42.1下编译安装PHP7 的方法
Dec 24 PHP
PHP编程获取各个时间段具体时间的方法
May 26 PHP
php脚本守护进程原理与实现方法详解
Jul 20 PHP
PHP count()函数讲解
Feb 03 PHP
解决PHP使用CURL发送GET请求时传递参数的问题
Oct 11 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
dede3.1分页文字采集过滤规则详说(图文教程)
2007/04/03 PHP
PHP 远程关机实现代码
2009/11/10 PHP
php设计模式 Delegation(委托模式)
2011/06/26 PHP
php实现可运算的验证码
2015/11/10 PHP
PHP模板引擎Smarty内建函数详解
2016/04/11 PHP
tp5.1 框架数据库高级查询技巧实例总结
2020/05/25 PHP
关于js中alert弹出窗口文本换行问题简单详细说明
2012/12/11 Javascript
JavaScript中for..in循环陷阱介绍
2013/11/12 Javascript
jQuery实现鼠标选文字发新浪微博的方法
2016/04/02 Javascript
javascript 数组的正态分布排序的问题
2016/07/31 Javascript
浅析JavaScript动画模拟拖拽原理
2016/12/09 Javascript
JS基于面向对象实现的多个倒计时器功能示例
2017/02/28 Javascript
jquery radio 动态控制选中失效问题的解决方法
2018/02/28 jQuery
详解在React-Native中持久化redux数据
2019/05/22 Javascript
Vue的transition-group与Virtual Dom Diff算法的使用
2019/12/09 Javascript
解决Vue的文本编辑器 vue-quill-editor 小图标样式排布错乱问题
2020/08/03 Javascript
浅谈vue-props的default写不写有什么区别
2020/08/09 Javascript
python+mongodb数据抓取详细介绍
2017/10/25 Python
Python编程使用*解包和itertools.product()求笛卡尔积的方法
2017/12/18 Python
Python+matplotlib绘制不同大小和颜色散点图实例
2018/01/19 Python
python pandas 如何替换某列的一个值
2018/06/09 Python
Python hexstring-list-str之间的转换方法
2019/06/12 Python
Python箱型图处理离群点的例子
2019/12/09 Python
pytorch制作自己的LMDB数据操作示例
2019/12/18 Python
详解python os.path.exists判断文件或文件夹是否存在
2020/11/16 Python
分享一个python的aes加密代码
2020/12/22 Python
CSS3等相关属性制作分页导航实现代码
2012/12/24 HTML / CSS
网易微博Web App用HTML5开发的过程介绍
2012/06/13 HTML / CSS
法国时尚品牌乐都特瑞士站:La Redoute瑞士
2016/09/05 全球购物
2014三八妇女节活动总结范文四篇
2014/03/09 职场文书
2014年圣诞节促销方案
2014/03/14 职场文书
小学班主任培训方案
2014/06/04 职场文书
2014年城市管理工作总结
2014/12/02 职场文书
办公室管理规章制度
2015/08/04 职场文书
2016学习全国教书育人楷模先进事迹心得体会
2016/01/21 职场文书
Tomcat弱口令复现及利用
2022/05/06 Servers