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 MsSql server时遇到的中文编码问题
Jun 11 PHP
PHP源码之 ext/mysql扩展部分
Jul 17 PHP
关于页面优化和伪静态
Oct 11 PHP
php操作excel文件 基于phpexcel
Jul 02 PHP
PHP在引号前面添加反斜杠(PHP去除反斜杠)
Sep 28 PHP
php加密算法之实现可逆加密算法和解密分享
Jan 21 PHP
浅谈discuz密码加密的方式
May 22 PHP
解决cPanel无法安装php5.2.17
Jun 22 PHP
PHP重定向与伪静态区别
Feb 19 PHP
PHP图像处理 imagestring添加图片水印与文字水印操作示例
Feb 06 PHP
ThinkPHP 框架实现的读取excel导入数据库操作示例
Apr 14 PHP
PHP控制循环操作的时间
Apr 01 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写的serv-u的web申请账号的程序
2006/10/09 PHP
PHP parse_url 一个好用的函数
2009/10/03 PHP
php下通过伪造http头破解防盗链的代码
2010/07/03 PHP
php实现微信小程序授权登录功能(实现流程)
2019/11/13 PHP
php框架知识点的整理和补充
2021/03/01 PHP
javascript一些不错的函数脚本代码
2008/09/10 Javascript
jquery得到font-size属性值实现代码
2013/09/30 Javascript
javascript实现简单的鼠标拖动效果实例
2015/04/10 Javascript
JQuery判断checkbox是否选中及其它复选框操作方法合集
2015/06/01 Javascript
在Node.js应用中读写Redis数据库的简单方法
2015/06/30 Javascript
如何用JavaScript实现动态修改CSS样式表
2016/05/20 Javascript
jQuery 特性操作详解及实例代码
2016/09/29 Javascript
JS代码实现百度地图 画圆 删除标注
2016/10/12 Javascript
JavaScript实现多重继承的方法分析
2018/01/09 Javascript
详解koa2学习中使用 async 、await、promise解决异步的问题
2018/11/13 Javascript
nodejs同步调用获取mysql数据时遇到的大坑
2019/03/02 NodeJs
JS阻止事件冒泡的方法详解
2019/08/26 Javascript
微信小程序之左右布局的实现代码
2019/12/13 Javascript
关于vue-cli3打包代码后白屏的解决方案
2020/09/02 Javascript
[00:56]2014DOTA2国际邀请赛 DK、iG 赛前探访
2014/07/10 DOTA
Python socket C/S结构的聊天室应用实现
2014/11/30 Python
python开发之文件操作用法实例
2015/11/13 Python
Python检测网站链接是否已存在
2016/04/07 Python
Django 生成登陆验证码代码分享
2017/12/12 Python
Python自定义函数定义,参数,调用代码解析
2017/12/27 Python
python爬虫 爬取超清壁纸代码实例
2019/08/16 Python
Python读写文件模式和文件对象方法实例详解
2019/09/17 Python
Html5页面在微信端的分享的实现方法
2018/08/30 HTML / CSS
JBL英国官网:JBL UK
2018/07/04 全球购物
香港现代设计家具品牌:Ziinlife Furniture
2018/11/13 全球购物
经济与贸易专业应届生求职信
2013/11/19 职场文书
会计试用期自我评价怎么写
2014/09/18 职场文书
单位工作证明书格式
2014/10/04 职场文书
出纳岗位职责
2015/01/31 职场文书
2015年国庆节寄语
2015/08/17 职场文书
Nginx下配置Https证书详细过程
2021/04/01 Servers