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 相关文章推荐
BBS(php &amp; mysql)完整版(四)
Oct 09 PHP
php+AJAX传送中文会导致乱码的问题的解决方法
Sep 08 PHP
PHPMyadmin 配置文件详解(配置)
Dec 03 PHP
关于session在PHP5的配置文件中的详细设置参数说明
Apr 20 PHP
php使用Smarty的相关注意事项及访问变量的几种方式
Dec 08 PHP
PHP中比较时间大小实例
Aug 21 PHP
PHP如何通过传引用的思想实现无限分类(代码简单)
Oct 13 PHP
详解Laravel视图间共享数据与视图Composer
Aug 04 PHP
thinkphp整合微信支付代码分享
Nov 24 PHP
PHP实现json_decode不转义中文的方法
May 20 PHP
老生常谈PHP面向对象之命令模式(必看篇)
May 24 PHP
php模仿qq空间或朋友圈发布动态、评论动态、回复评论、删除动态或评论的功能(中)
Jun 11 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 session安全问题分析
2011/06/24 PHP
PHP管理内存函数 memory_get_usage()使用介绍
2012/09/23 PHP
PHP中把数据库查询结果输出为json格式简单实例
2015/04/09 PHP
prototype Element学习笔记(篇一)
2008/10/26 Javascript
基于jquery的跟随屏幕滚动代码
2012/07/24 Javascript
JavaScript使用replace函数替换字符串的方法
2015/04/06 Javascript
浅析AngularJS中的生命周期和延迟处理
2015/06/18 Javascript
基于jQuery实现左右图片轮播(原理通用)
2015/12/24 Javascript
jQuery页面元素动态添加后绑定事件丢失方法,非 live
2016/06/16 Javascript
jquery实现垂直和水平菜单导航栏
2020/08/27 Javascript
微信小程序 Button 组件详解及简单实例
2017/01/10 Javascript
js实现炫酷的左右轮播图
2017/01/18 Javascript
基于JS实现翻书效果的页面切换样式
2017/02/16 Javascript
微信禁止下拉查看URL的处理方法
2017/09/28 Javascript
Javascript防止图片拉伸的自适应处理方法
2017/12/26 Javascript
解决循环中setTimeout执行顺序的问题
2018/06/20 Javascript
ES6使用新特性Proxy实现的数据绑定功能实例
2020/05/11 Javascript
在vue中使用console.log无效的解决
2020/08/09 Javascript
Python的内存泄漏及gc模块的使用分析
2014/07/16 Python
约瑟夫问题的Python和C++求解方法
2015/08/20 Python
Windows中使用wxPython和py2exe开发Python的GUI程序的实例教程
2016/07/11 Python
Python代码实现KNN算法
2017/12/20 Python
pytorch + visdom 处理简单分类问题的示例
2018/06/04 Python
Python循环结构的应用场景详解
2019/07/11 Python
PyTorch笔记之scatter()函数的使用
2020/02/12 Python
Python爬虫scrapy框架Cookie池(微博Cookie池)的使用
2021/01/13 Python
澳大利亚最受欢迎的美发和美容在线商店:Catwalk
2018/12/12 全球购物
荷兰街头时尚之家:Funkie House
2019/03/18 全球购物
文职个人求职信范文
2013/09/23 职场文书
公司营业员的自我评价
2014/03/04 职场文书
中国好声音广告词
2014/03/18 职场文书
社会工作专业求职信
2014/07/15 职场文书
公司领导班子对照检查材料
2014/09/24 职场文书
航班延误投诉信
2015/07/02 职场文书
安全学习心得体会范文
2016/01/18 职场文书
Python实现byte转integer
2021/06/03 Python