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 相关文章推荐
php 301转向实现代码
Sep 18 PHP
php设计模式 Singleton(单例模式)
Jun 26 PHP
PHP 小心urldecode引发的SQL注入漏洞
Oct 27 PHP
Fine Uploader文件上传组件应用介绍
Jan 06 PHP
处理单名多值表单的详解
Jun 08 PHP
编写Smarty插件在模板中直接加载数据的详细介绍
Jun 26 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(五)
Jun 23 PHP
从零开始学YII2框架(五)快速生成代码工具 Gii 的使用
Aug 20 PHP
PHP操作文件的一些基本函数使用示例
Nov 18 PHP
微信开发之php表单微信中自动提交两次问题解决办法
Jan 08 PHP
浅谈php使用curl模拟多线程发送请求
Mar 08 PHP
laravel邮件发送的实现代码示例
Jan 31 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
Zend Studio for Eclipse的java.lang.NullPointerException错误的解决方法
2008/12/06 PHP
PHP文章按日期(月日)SQL归档语句
2012/11/29 PHP
jQuery Mobile + PHP实现文件上传
2014/12/12 PHP
PHP实现的蚂蚁爬杆路径算法代码
2015/12/03 PHP
javascript DOM编程实例(智播客学习)
2009/11/23 Javascript
几个比较实用的JavaScript 测试及效验工具
2010/04/18 Javascript
js操作select控件的几种方法
2010/06/02 Javascript
真正的JQuery.ajax传递中文参数的解决方法
2011/05/28 Javascript
js中如何把字符串转化为对象、数组示例代码
2013/07/17 Javascript
鼠标左键单击冲突的问题解决方法(防止冒泡)
2014/05/14 Javascript
jQuery回调函数的定义及用法实例
2014/12/23 Javascript
JavaScript对象数组的排序处理方法
2015/10/21 Javascript
js clearInterval()方法的定义和用法
2015/11/11 Javascript
精通JavaScript的this关键字
2020/05/28 Javascript
JS+Canvas实现的俄罗斯方块游戏完整实例
2016/12/12 Javascript
jQuery中页面返回顶部的方法总结
2016/12/30 Javascript
原生js实现简单的Ripple按钮实例代码
2017/03/24 Javascript
Javascript实现从小到大的数组转换成二叉搜索树
2017/06/13 Javascript
js实现会跳动的日历效果(完整实例)
2017/10/18 Javascript
js删除对象/数组中null、undefined、空对象及空数组方法示例
2018/11/14 Javascript
nodejs 使用 js 模块的方法实例详解
2018/12/04 NodeJs
在vue中使用G2图表的示例代码
2019/03/19 Javascript
webpack中的模式(mode)使用详解
2020/02/20 Javascript
12 种使用Vue 的最佳做法
2020/03/30 Javascript
Python切片工具pillow用法示例
2018/03/30 Python
python执行系统命令后获取返回值的几种方式集合
2018/05/12 Python
python实现下载pop3邮件保存到本地
2018/06/19 Python
分析经典Python开发工程师面试题
2019/04/08 Python
Python3.5装饰器原理及应用实例详解
2019/04/30 Python
Django shell调试models输出的SQL语句方法
2019/08/29 Python
Python django框架输入汉字,数字,字符生成二维码实现详解
2019/09/24 Python
python中numpy数组与list相互转换实例方法
2021/01/29 Python
2015秋季新学期开学寄语
2015/05/28 职场文书
Go语言中的UTF-8实现
2021/04/26 Golang
python基础学习之生成器与文件系统知识总结
2021/05/25 Python
table不让td文字溢出操作方法
2022/12/24 HTML / CSS