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 相关文章推荐
web方式ftp
Oct 09 PHP
PHP 数组入门教程小结
May 20 PHP
解决PHP在DOS命令行下却无法链接MySQL的技术笔记
Dec 29 PHP
PHP json格式和js json格式 js跨域调用实现代码
Sep 08 PHP
PHP错误提示的关闭方法详解
Jun 23 PHP
解析php中eclipse 用空格替换 tab键
Jun 24 PHP
Zend Framework 2.0事件管理器(The EventManager)入门教程
Aug 11 PHP
详解PHP实现执行定时任务
Dec 21 PHP
PHP二维数组排序简单实现方法
Feb 14 PHP
PHP写API输出的时用echo的原因详解
Apr 28 PHP
php生成微信红包数组的方法
Sep 05 PHP
tp5框架基于ajax实现异步删除图片的方法示例
Feb 10 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知道与问问的采集插件代码
2010/10/12 PHP
探讨:如何使用PhpDocumentor生成文档
2013/06/25 PHP
JavaScript 利用StringBuffer类提升+=拼接字符串效率
2009/11/24 Javascript
javascript开发中因空格引发的错误
2010/11/08 Javascript
jquery创建一个ajax关键词数据搜索实现思路
2013/02/26 Javascript
JavaScript事件处理器中的event参数使用介绍
2013/05/24 Javascript
Jquery easyUI 更新行示例
2014/03/06 Javascript
浅谈javascript中createElement事件
2014/12/05 Javascript
JavaScript运算符小结
2015/06/03 Javascript
jquery实现带缩略图的全屏图片画廊效果实例
2015/06/25 Javascript
JavaScript数组合并的多种方法
2016/05/22 Javascript
js实现微博发布小功能
2017/01/12 Javascript
原生js封装自定义滚动条
2017/03/24 Javascript
基于jQuery实现Ajax验证用户名是否可用实例
2018/03/25 jQuery
对angular2中的ngfor和ngif指令嵌套实例讲解
2018/09/12 Javascript
vue 点击展开显示更多(点击收起部分隐藏)
2019/04/09 Javascript
vue.js 2.0实现简单分页效果
2019/07/29 Javascript
python备份文件以及mysql数据库的脚本代码
2013/06/10 Python
Python读取视频的两种方法(imageio和cv2)
2018/04/15 Python
python用fsolve、leastsq对非线性方程组求解
2018/12/15 Python
Python3数字求和的实例
2019/02/19 Python
用Anaconda安装本地python包的方法及路径问题(图文)
2019/07/16 Python
Python sklearn库实现PCA教程(以鸢尾花分类为例)
2020/02/24 Python
python 递归调用返回None的问题及解决方法
2020/03/16 Python
Html5中的桌面通知Notification的实现
2018/09/25 HTML / CSS
HTML5实现多张图片上传功能
2016/03/11 HTML / CSS
浅析图片上传及canvas压缩的流程
2020/06/10 HTML / CSS
丝芙兰意大利官方网站:Sephora.it
2019/12/13 全球购物
htmlentities() 和 htmlspecialchars()有什么区别
2015/07/01 面试题
WEB控件可以激发服务端事件,请谈谈服务端事件是怎么发生并解释其原理?自动传回是什么?为什么要使用自动传回?
2012/02/21 面试题
应聘教师推荐信
2013/10/31 职场文书
决心书范文
2014/03/11 职场文书
模具设计与制造专业自荐书
2014/07/01 职场文书
县委常委班子专题民主生活会查摆问题及整改措施
2014/09/27 职场文书
家属慰问信
2015/02/14 职场文书
导游词之南昌滕王阁
2019/11/29 职场文书