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 相关文章推荐
PHPlet在Windows下的安装
Oct 09 PHP
七款最流行的PHP本地服务器分享
Feb 19 PHP
php中{}大括号是什么意思
Dec 01 PHP
PHP中使用localhost连接Mysql不成功的解决方法
Aug 20 PHP
PHP抽奖算法程序代码分享
Oct 08 PHP
thinkphp3.x中cookie方法的用法分析
May 19 PHP
smarty自定义函数用法示例
May 20 PHP
php如何执行非缓冲查询API
Jul 22 PHP
PHP简单判断iPhone、iPad、Android及PC设备的方法
Oct 11 PHP
php实现的AES加密类定义与用法示例
Jan 29 PHP
PHP文件后缀不强制为.php方法
Mar 31 PHP
laravel 创建命令行命令的图文教程
Oct 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 iconv() : Detected an illegal character in input string
2010/12/05 PHP
PHP中$this和$that指针使用实例
2015/01/06 PHP
php使用for语句输出三角形的方法
2015/06/09 PHP
PHPUnit测试私有属性和方法功能示例
2018/06/12 PHP
防止页面被iframe(兼容IE,Firefox火狐)
2010/07/04 Javascript
JavaScript基本编码模式小结
2012/05/23 Javascript
js和jquery中循环的退出和继续学习记录
2014/09/06 Javascript
javascript将DOM节点添加到文档的方法实例分析
2015/08/04 Javascript
javascript单页面手势滑屏切换原理详解
2016/03/21 Javascript
JS中改变this指向的方法(call和apply、bind)
2016/03/26 Javascript
jQuery与JavaScript节点创建方法的对比
2016/11/18 Javascript
JS如何设置iOS中微信浏览器的title
2016/11/22 Javascript
Spring Boot+AngularJS+BootStrap实现进度条示例代码
2017/03/02 Javascript
简单实现js放大镜效果
2017/07/24 Javascript
了解ESlint和其相关操作小结
2018/05/21 Javascript
Vue引用Swiper4插件无法重写分页器样式的解决方法
2018/09/27 Javascript
微信小程序之onLaunch与onload异步问题详解
2019/03/28 Javascript
浅谈ECMAScript 中的Array类型
2019/06/10 Javascript
JS实现返回上一页并刷新页面的方法分析
2019/07/16 Javascript
vue中获取滚动table的可视页面宽度调整表头与列对齐(每列宽度不都相同)
2019/08/17 Javascript
vue绑定数字类型 value为数字的实例
2020/08/31 Javascript
[46:55]Ti4 冒泡赛第二轮 LGD vs C9
2014/07/14 DOTA
教你用Type Hint提高Python程序开发效率
2016/08/08 Python
小白如何入门Python? 制作一个网站为例
2018/03/06 Python
tensorflow实现加载mnist数据集
2018/09/08 Python
Python多线程Threading、子线程与守护线程实例详解
2020/03/24 Python
python获取整个网页源码的方法
2020/08/03 Python
python 数据类型强制转换的总结
2021/01/25 Python
html5之Canvas路径绘图、坐标变换应用实例
2012/12/26 HTML / CSS
前端使用canvas生成盲水印的加密解密的实现
2020/12/16 HTML / CSS
彪马加拿大官网:PUMA加拿大
2018/10/04 全球购物
考试作弊检讨书大全
2014/02/18 职场文书
关爱女孩行动实施方案
2014/03/13 职场文书
初三班主任寄语大全
2014/04/04 职场文书
放飞梦想演讲稿600字
2014/08/26 职场文书
护士心得体会范文
2016/01/25 职场文书