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 相关文章推荐
GD输出汉字的函数的分析
Oct 09 PHP
PHP 检查扩展库或函数是否可用的代码
Apr 06 PHP
PHP中改变图片的尺寸大小的代码
Jul 17 PHP
php daddslashes()和 saddslashes()有哪些区别分析
Oct 26 PHP
php中创建和调用webservice接口示例
Jul 25 PHP
php利用反射实现插件机制的方法
Mar 14 PHP
PHP实现微信网页授权开发教程
Jan 19 PHP
PHP HTTP 认证实例详解
Nov 03 PHP
php实现遍历文件夹的方法汇总
Mar 02 PHP
Laravel框架在本地虚拟机快速安装的方法详解
Jun 11 PHP
PHP从尾到头打印链表实例讲解
Sep 27 PHP
php微信公众号开发之微信企业付款给个人
Oct 04 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 Xdebug 调试扩展的安装与使用.
2010/03/13 PHP
PHP调用存储过程返回值不一致问题的解决方法分析
2016/04/26 PHP
php下的原生ajax请求用法实例分析
2020/02/28 PHP
JS JavaScript获取Url参数,src属性参数
2021/03/09 Javascript
基于JavaScript实现继承机制之构造函数+原型链混合方式的使用详解
2013/05/07 Javascript
jquery弹出框的用法示例(一)
2013/08/26 Javascript
JS中表单的使用小结
2014/01/11 Javascript
js实现在同一窗口浏览图片
2014/09/17 Javascript
JS特效实现图片自动播放并可控的效果
2015/07/31 Javascript
基于jQuery实现点击最后一行实现行自增效果的表格
2016/01/12 Javascript
jQuery 全选 全不选 事件绑定的实现代码
2017/01/23 Javascript
js中Number数字数值运算后值不对的解决方法
2017/02/28 Javascript
weex里Vuex state使用storage持久化详解
2017/09/09 Javascript
jQuery实现简单聊天室
2020/02/08 jQuery
谈谈我在vue-cli3中用预渲染遇到的坑
2020/04/22 Javascript
jquery.validate自定义验证用法实例分析【成功提示与择要提示】
2020/06/06 jQuery
js+canvas实现刮刮奖功能
2020/09/13 Javascript
[01:23]一分钟告诉你 DOTA2为什么叫信仰2
2014/06/20 DOTA
[01:07:47]Secret vs Optic Supermajor 胜者组 BO3 第一场 6.4
2018/06/05 DOTA
python实现批量下载新浪博客的方法
2015/06/15 Python
Python随机生成均匀分布在三角形内或者任意多边形内的点
2017/12/14 Python
python进程和线程用法知识点总结
2019/05/28 Python
Python 如何提高元组的可读性
2019/08/26 Python
python实现提取str字符串/json中多级目录下的某个值
2020/02/27 Python
Django自定义全局403、404、500错误页面的示例代码
2020/03/08 Python
图解Python中深浅copy(通俗易懂)
2020/09/03 Python
CSS3毛玻璃效果(blur)有白边问题的解决方法
2016/11/15 HTML / CSS
html5构建触屏网站之touch事件介绍
2013/01/07 HTML / CSS
爱尔兰灯和灯具网上商店:Lights.ie
2018/03/26 全球购物
美国男士和女士奢侈品折扣手表购物网站:Certified Watch Store
2018/06/13 全球购物
adidas爱尔兰官方网站:阿迪达斯运动鞋和运动服
2019/11/01 全球购物
税务会计岗位职责
2014/02/18 职场文书
寝室长工作失责检讨书
2014/10/06 职场文书
婚育证明样本
2015/06/16 职场文书
python入门之算法学习
2021/04/22 Python
mysql分组后合并显示一个字段的多条数据方式
2022/01/22 MySQL