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读取目录下所有文件的代码
Jan 07 PHP
php htmlentities和htmlspecialchars 的区别
Aug 18 PHP
PHP实现的封装验证码类详解
Jun 18 PHP
php记录代码执行时间(实现代码)
Jul 05 PHP
限制ckeditor上传图片文件大小的方法
Nov 15 PHP
PHP连接MSSQL2008/2005数据库(SQLSRV)配置实例
Oct 22 PHP
php中判断数组相等的方法以及数组运算符介绍
Mar 30 PHP
thinkphp3.x中变量的获取和过滤方法详解
May 20 PHP
关于Laravel Route重定向的一个注意点
Jan 16 PHP
php输出含有“#”字符串的方法
Jan 18 PHP
thinkPHP5框架分页样式类完整示例
Sep 01 PHP
PHP设计模式(四)原型模式Prototype实例详解【创建型】
May 02 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 数组遍历foreach语法结构及实例
2016/06/13 PHP
详解no input file specified 三种解决方法
2019/11/29 PHP
laravel框架模型中非静态方法也能静态调用的原理分析
2019/11/23 PHP
tp5.1 框架join方法用法实例分析
2020/05/26 PHP
js AspxButton的客户端操作
2009/06/26 Javascript
学习ExtJS fit布局使用说明
2009/10/08 Javascript
appendChild() 或 insertBefore()使用与区别介绍
2013/10/11 Javascript
jquery实现弹出层遮罩效果的简单实例
2014/03/03 Javascript
js改变鼠标的形状和样式的方法
2014/03/31 Javascript
nodejs中的fiber(纤程)库详解
2015/03/24 NodeJs
老生常谈 关于JavaScript的类的继承
2016/06/24 Javascript
jQuery插件FusionCharts绘制2D环饼图效果示例【附demo源码】
2017/04/10 jQuery
浅谈Node.js 子进程与应用场景
2018/01/24 Javascript
浅谈webpack打包过程中因为图片的路径导致的问题
2018/02/21 Javascript
vue通信方式EventBus的实现代码详解
2019/06/10 Javascript
浅谈Vue为什么不能检测数组变动
2019/10/14 Javascript
VUE UPLOAD 通过ACTION返回上传结果操作
2020/09/07 Javascript
vue 防止页面加载时看到花括号的解决操作
2020/11/09 Javascript
[40:01]OG vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
使用cx_freeze把python打包exe示例
2014/01/24 Python
python实现自动登录人人网并采集信息的方法
2015/06/28 Python
Python变量赋值的秘密分享
2018/04/03 Python
python实现批量修改图片格式和尺寸
2018/06/07 Python
pandas 按照特定顺序输出的实现代码
2018/07/10 Python
Python统计学一数据的概括性度量详解
2020/03/03 Python
Python文件读写w+和r+区别解析
2020/03/26 Python
python 给图像添加透明度(alpha通道)
2020/04/09 Python
Python json转字典字符方法实例解析
2020/04/13 Python
Python中用xlwt制作表格实例讲解
2020/11/05 Python
普罗米修斯教学反思
2014/02/06 职场文书
升职自我推荐信范文
2015/03/25 职场文书
关于应聘教师的自荐信
2016/01/28 职场文书
OpenCV-Python实现轮廓的特征值
2021/06/09 Python
Node实现搜索框进行模糊查询
2021/06/28 Javascript
nginx的zabbix 5.0安装部署的方法步骤
2021/07/16 Servers
mysql中如何用命令创建联合唯一索引
2022/04/20 MySQL