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安装攻略:常见问题解答(二)
Oct 09 PHP
简单的过滤字符串中的HTML标记
Dec 25 PHP
fleaphp常用方法分页之Pager使用方法
Apr 23 PHP
PHP中SESSION使用中的一点经验总结
Mar 30 PHP
php写的带缓存数据功能的mysqli类
Sep 06 PHP
php表单提交与$_POST实例分析
Jan 26 PHP
浅析Yii2 gridview实现批量删除教程
Apr 22 PHP
如何修改yii2.0自带的user表为其它的表
Aug 01 PHP
Yii 使用intervention/image拓展实现图像处理功能
Jun 22 PHP
基于laravel缓冲cache的用法详解
Oct 23 PHP
PHP pthreads v3使用中的一些坑和注意点分析
Feb 21 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/07/22 PHP
PHP FOR MYSQL 代码生成助手(根据Mysql里的字段自动生成类文件的)
2011/07/23 PHP
PHP MySQL应用中使用XOR运算加密算法分享
2011/08/28 PHP
destoon在各个服务器下设置URL Rewrite(伪静态)的方法
2014/06/21 Servers
php单例模式实现方法分析
2015/03/14 PHP
全面解读PHP的人气开发框架Laravel
2015/10/15 PHP
php利用header函数下载各种文件
2016/08/24 PHP
extjs 学习笔记(二) Ext.Element类
2009/10/13 Javascript
javascript编码的几个方法详细介绍
2013/01/06 Javascript
JS的事件绑定深入认识
2014/06/26 Javascript
javascript实现table选中的行以指定颜色高亮显示的方法
2015/05/13 Javascript
javascript中createElement的两种创建方式
2015/05/14 Javascript
JavaScript对Cookie进行读写操作实例
2015/07/25 Javascript
jquery分页插件jquery.pagination.js使用方法解析
2016/04/01 Javascript
AngularJS ng-bind-template 指令详解
2016/07/30 Javascript
Vuejs第七篇之Vuejs过渡动画案例全面解析
2016/09/05 Javascript
vue中created和mounted的区别浅析
2019/08/13 Javascript
vue中watch的用法汇总
2020/12/28 Vue.js
[03:56]还原FTP电影首映式 DOTA2群星拼出遗迹世界
2014/03/26 DOTA
[02:55]2018DOTA2国际邀请赛勇士令状不朽珍藏Ⅲ饰品一览
2018/08/01 DOTA
Python中暂存上传图片的方法
2015/02/18 Python
Python 常用模块 re 使用方法详解
2019/06/06 Python
Python字典的概念及常见应用实例详解
2019/10/30 Python
python编程进阶之类和对象用法实例分析
2020/02/21 Python
在 Pycharm 安装使用black的方法详解
2020/04/02 Python
萨克斯第五大道精品百货店: Saks Fifth Avenue
2017/04/28 全球购物
巴西在线鞋店:Shoestock
2017/10/28 全球购物
印度化妆品购物网站:Nykaa
2018/07/22 全球购物
加大码胸罩、内裤和服装:Just My Size
2019/03/21 全球购物
linux面试题参考答案(7)
2012/10/29 面试题
中专毕业生求职简历的自我评价
2013/10/21 职场文书
运动会跳远加油稿
2014/02/20 职场文书
2014医学院领导干部四风对照检查材料思想汇报
2014/09/16 职场文书
2014年控辍保学工作总结
2014/12/08 职场文书
电力企业职工培训心得体会
2016/01/11 职场文书
入党申请书怎么写?
2019/06/11 职场文书