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 相关文章推荐
模拟OICQ的实现思路和核心程序(三)
Oct 09 PHP
php生成扇形比例图实例
Nov 06 PHP
PHP empty函数报错解决办法
Mar 06 PHP
php上传文件问题汇总
Jan 30 PHP
php判断两个日期之间相差多少个月份的方法
Jun 18 PHP
php实现比较两个文件夹异同的方法
Jun 18 PHP
php语言中使用json的技巧及json的实现代码详解
Oct 27 PHP
Yii2.0表关联查询实例分析
Jul 18 PHP
PHP制作登录异常ip检测功能的实例代码
Nov 16 PHP
PHP使用finfo_file()函数检测上传图片类型的实现方法
Apr 18 PHP
PHP设计模式之原型模式定义与用法详解
Apr 03 PHP
PHP5.6读写excel表格文件操作示例
Feb 26 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 需要掌握的东西 不做浮躁的人
2009/12/28 PHP
ThinkPHP3.1查询语言详解
2014/06/19 PHP
浅谈mysql_query()函数的返回值问题
2016/09/05 PHP
PHP实现限制IP访问的方法
2017/04/20 PHP
Laravel使用Queue队列的技巧汇总
2019/09/02 PHP
Laravel中GraphQL接口请求频率实战记录
2020/09/01 PHP
一个不错的用JavaScript实现的UBB编码函数
2007/03/09 Javascript
Javascript Request获取请求参数如何实现
2012/11/28 Javascript
jQuery超赞的评分插件(8款)
2015/08/20 Javascript
js跨域请求数据的3种常用的方法
2015/12/01 Javascript
js与jQuery实现checkbox复选框全选/全不选的方法
2016/01/05 Javascript
JS控制弹出悬浮窗口(一览画面)的实例代码
2016/05/30 Javascript
js图片轮播手动切换特效
2017/01/12 Javascript
jquery写出PC端轮播图实例
2018/01/26 jQuery
vue父组件向子组件传递多个数据的实例
2018/03/01 Javascript
Egg.js 中 AJax 上传文件获取参数的方法
2018/10/10 Javascript
详解Ant Design of React的安装和使用方法
2018/12/27 Javascript
vue分页器组件编写方法详解
2019/06/28 Javascript
如何正确理解vue中的key详解
2019/11/02 Javascript
python判断windows系统是32位还是64位的方法
2015/05/11 Python
批量获取及验证HTTP代理的Python脚本
2017/04/23 Python
Python计算库numpy进行方差/标准方差/样本标准方差/协方差的计算
2018/12/28 Python
在python 中实现运行多条shell命令
2019/01/07 Python
Python调用C语言的实现
2019/07/26 Python
python中编写函数并调用的知识点总结
2021/01/13 Python
CSS3 Notes: -webkit-box-reflect实现倒影的实例
2016/12/08 HTML / CSS
const和static readonly区别
2013/05/20 面试题
高级工程师英文求职信
2014/03/19 职场文书
保险公司晨会主持词
2014/03/22 职场文书
村干部培训方案
2014/05/02 职场文书
排查整治工作方案
2014/06/09 职场文书
户籍证明书标准模板
2014/09/10 职场文书
2014年四风问题个人对照自查剖析材料
2014/09/15 职场文书
延安红色之旅心得体会
2014/10/07 职场文书
2014年志愿者工作总结
2014/11/20 职场文书
Win11快速关闭所有广告推荐
2022/04/19 数码科技