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 相关文章推荐
1.PHP简介
Oct 09 PHP
判断Keep-Alive模式的HTTP请求的结束的实现代码
Aug 06 PHP
一组PHP可逆加密解密算法实例代码
Jan 21 PHP
基于preg_match_all采集后数据处理的一点心得笔记(编码转换和正则匹配)
Jan 31 PHP
php 表单提交大量数据发生丢失的解决方法
Mar 03 PHP
curl和libcurl的区别简介
Jul 01 PHP
php通过前序遍历树实现无需递归的无限极分类
Jul 10 PHP
PHP环境搭建(php+Apache+mysql)
Nov 14 PHP
thinkphp3.2嵌入百度编辑器ueditor的实例代码
Jul 13 PHP
php基于session锁防止阻塞请求的方法分析
Aug 07 PHP
PHP实现获取毫秒时间戳的方法【使用microtime()函数】
Mar 01 PHP
php的RSA加密解密算法原理与用法分析
Jan 23 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/09/01 PHP
php实现数组筛选奇数和偶数示例
2014/04/11 PHP
thinkphp表单上传文件并将文件路径保存到数据库中
2016/07/28 PHP
jQuery EasyUI API 中文文档 - TreeGrid 树表格使用介绍
2011/11/21 Javascript
JS限制Textarea文本域字符个数的具体实现
2013/08/02 Javascript
extjs表格文本启用选择复制功能具体实现
2013/10/11 Javascript
浅析jQuery1.8的几个小变化
2013/12/10 Javascript
JavaScript中的类数组对象介绍
2014/12/30 Javascript
移动端JQ插件hammer使用详解
2015/07/03 Javascript
推荐10 个很棒的 jQuery 特效代码
2015/10/04 Javascript
mint-ui 时间插件使用及获取选择值的方法
2018/02/09 Javascript
vue+element实现批量删除功能的示例
2018/02/28 Javascript
基于Axios 常用的请求方法别名(详解)
2018/03/13 Javascript
vue.js 中使用(...)运算符报错的解决方法
2018/08/09 Javascript
详解Vue项目在其他电脑npm run dev运行报错的解决方法
2018/10/29 Javascript
vue实现导航标题栏随页面滚动渐隐渐显效果
2020/03/12 Javascript
原生JavaScript写出Tabs标签页的实例代码
2020/07/20 Javascript
vue中实现拖动调整左右两侧div的宽度的示例代码
2020/07/22 Javascript
element-ui中dialog弹窗关闭按钮失效的解决
2020/09/22 Javascript
在vue中通过render函数给子组件设置ref操作
2020/11/17 Vue.js
[49:42]DOTA2上海特级锦标赛主赛事日 - 3 胜者组第二轮#2Secret VS EG第一局
2016/03/04 DOTA
Python使用multiprocessing创建进程的方法
2015/06/04 Python
Python2 Selenium元素定位的实现(8种)
2019/02/25 Python
Windows 安装 Anaconda3+PyCharm的方法步骤
2019/06/13 Python
python实现最大优先队列
2019/08/29 Python
3行Python代码实现图像照片抠图和换底色的方法
2019/10/10 Python
Python中remove漏删和索引越界问题的解决
2020/03/18 Python
python zip,lambda,map函数代码实例
2020/04/04 Python
Python基于gevent实现高并发代码实例
2020/05/15 Python
tensorflow实现残差网络方式(mnist数据集)
2020/05/26 Python
python 如何调用 dubbo 接口
2020/09/24 Python
行政部主管岗位职责
2013/12/28 职场文书
材料工程专业毕业生求职信
2014/03/04 职场文书
忠犬八公的故事观后感
2015/06/05 职场文书
女方家长婚礼答谢词
2015/09/29 职场文书
百年校庆宣传标语口号
2015/12/26 职场文书