ThinkPHP框架实现FTP图片上传功能示例


Posted in PHP onApril 08, 2019

本文实例讲述了ThinkPHP框架实现FTP图片上传功能。分享给大家供大家参考,具体如下:

背景:

图片上传功能应该是个极为普遍的,在此参考了ThinkPHP 框架中的集成方法整理了一下FTP图片的上传功能,这样方便在后台操作时,把有关的图片直接上传到线上的图片服务器,避免大流量访问的图片加载缓慢,降低网站的访问压力,不合理之处,敬请指摘...

操作:

1.前端设计

这里主要为了测试功能的实现,使用最简单的设计,既方便参考又有利于后期的功能扩展。如下附upload.html主要代码,着重注意红框圈出的代码,其中css样式比较简单,需要的可以参考后面的源代码。

ThinkPHP框架实现FTP图片上传功能示例

2.后台控制器设计

config.class.php 主要代码如下所示,其中设计的表“conf”在此只需用两个字段就好——'tag','value',可以使用简单的varchar类型。

public function upload(){
  if (IS_POST){
    foreach ($_FILES as $key => $value){
      $img = handleImg($key);
      $furl = C('REMOTE_ROOT').$img;
      if ($img){
        ftp_upload($furl,$img);
        $saveData['value'] = $img;
        M('conf')
          ->where("tag = '".$key."'")
          ->save($saveData);
      }
    }
    $this->success('FTP 测试完成',U('Config/upload'),2);
  }else{
    $imgUrl = M('conf')
      ->where("tag = 'upImg'")
      ->getField('value');
    $this->assign('imgUrl',$imgUrl);
    $this->display();
  }
}

3.配置数据

在公共配置文件中,进行如下常量的数据配置,参考代码如下,注意配置FTP 账号及密码的正确性,此处安全起见只是举例。

//ftp(外网服务器)上传文件相关参数
'FTP_SEVER'    => 'http://img.52zhenmi.com', //此地址,作为图片读取的位置 请上线前仔细确认
'FTP_HOST'    => 'img.52zhenmi.com',
'WEB_SEVER'   => 'http://img.52zhenmi.com',
'WEB_M_SERVER'  => 'http://www.52zhenmi.com/m',
'FTP_NAME'    => 'fexxxi',//ftp帐户
'FTP_PWD'    => '1qxxxxxxw',//ftp密码
'FTP_PORT'    => '21',//ftp端口,默认为21
'FTP_PASV'    => true,//是否开启被动模式,true开启,默认不开启
'FTP_SSL'    => false,//ssl连接,默认不开启
'FTP_TIMEOUT'  => 60,//超时时间,默认60,单位 s
'REMOTE_ROOT'  => '/',//图片服务器根目录

4.引入文件

以我的代码为例,在此引用了两个文件,其中的FTP.class.php 放在了'/Library/Think' 目录下;Upload.class.php 放在了'/Library/Org/Net'目录下,可根据自己的使用习惯自行调整目录,只要保证实例化路径时没问题就可。

5.公共函数添加

注意添加上文步骤2中使用到的公共函数。

/**
 * 图片上传的公共处理方法
 * @param string $fileName 图片上传的name
 * @return string 图片的存储路径
 */
function handleImg($fileName){
  if($_FILES[$fileName]['tmp_name'] != ""){
    $img = $_FILES[$fileName];
    $imgUrl = __ROOT__."/public";
    $upload = new \Org\Net\Upload($img, $imgUrl);
    return $upload->main();
  }
}
//FTP上传文件函数
function ftp_upload($remotefile,$localfile){
  $ftp = new \Think\Ftp();
  $data['server'] = C('FTP_HOST');
  $data['username'] = C('FTP_NAME');//ftp帐户
  $data['password'] = C('FTP_PWD');//ftp密码
  $data['port'] = C('FTP_PORT');//ftp端口,默认为21
  $data['pasv'] = C('FTP_PASV');//是否开启被动模式,true开启,默认不开启
  $data['ssl'] = C('FTP_SSL');//ssl连接,默认不开启
  $data['timeout'] = C('FTP_TIMEOUT');//超时时间,默认60,单位 s
  $info = $ftp->start($data);
  if($info){
    if($ftp->put($remotefile,$localfile)){}
  }
  $ftp->close();
}

6.操作截图

ThinkPHP框架实现FTP图片上传功能示例

ThinkPHP框架实现FTP图片上传功能示例

7.提示

对于这份参考代码,涉及到的公共方法handleImg()会先将需要上传的图片传到当前操作的网站根目录,之后又会通过ftp_upload()将图片传到对应的图片FTP服务器,从实现步骤上看第一步多余,主要是开发过程中的测试服务器不符合FTP账号要求,同时又要方便线上内容修改的及时更新,暂没优化,也不麻烦,算留大家一个自由发挥的机会吧。

源代码点击此处本站下载

希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。

PHP 相关文章推荐
Php Cookie的一个使用注意点
Nov 08 PHP
php中使用parse_url()对网址进行解析的实现代码(parse_url详解)
Jan 03 PHP
解析php扩展php_curl.dll不加载的解决方法
Jun 26 PHP
PHP strstr 函数判断字符串是否否存在的实例代码
Sep 28 PHP
php操作xml
Oct 27 PHP
php中explode函数用法分析
Nov 15 PHP
php中有关合并某一字段键值相同的数组合并的改进
Mar 10 PHP
PHP cURL初始化和执行方法入门级代码
May 28 PHP
php实现scws中文分词搜索的方法
Dec 25 PHP
PHP数组函数知识汇总
May 12 PHP
PHP实现的DES加密解密封装类完整实例
Apr 29 PHP
php实现的证件照换底色功能示例【人像抠图/换背景图】
May 29 PHP
详解php命令注入攻击
Apr 06 #PHP
PHP实现数组向任意位置插入,删除,替换数据操作示例
Apr 05 #PHP
PHP中Static(静态)关键字功能与用法实例分析
Apr 05 #PHP
PHP7匿名类的用法示例
Apr 05 #PHP
实例说明js脚本语言和php脚本语言的区别
Apr 04 #PHP
PHP中quotemeta()函数的用法讲解
Apr 04 #PHP
Laravel多域名下字段验证的方法
Apr 04 #PHP
You might like
PHP:风雨欲来 路在何方?
2006/10/09 PHP
支持php4、php5的mysql数据库操作类
2008/01/10 PHP
PHP面向对象程序设计之接口用法
2014/08/20 PHP
什么情况下可以不写PHP的闭合标签“?>”
2014/08/28 PHP
浅谈PHP解析URL函数parse_url和parse_str
2014/11/11 PHP
php格式文件打开的四种方法
2018/02/24 PHP
PHP基于session.upload_progress 实现文件上传进度显示功能详解
2019/08/09 PHP
js nextSibling属性和previousSibling属性概述及使用注意
2013/02/16 Javascript
JavaScript回调(callback)函数概念自我理解及示例
2013/07/04 Javascript
深入理解javascript原型链和继承
2014/09/23 Javascript
使用jQuery操作HTML的table表格的实例解析
2016/03/13 Javascript
浅析AMD CMD CommonJS规范--javascript模块化加载学习心得总结
2016/03/16 Javascript
搭建Bootstrap离线文档的方法
2016/12/02 Javascript
JS去掉字符串前后空格或去掉所有空格的用法
2017/03/25 Javascript
vue2实现可复用的轮播图carousel组件详解
2017/11/27 Javascript
Material(包括Material Icon)在Angular2中的使用详解
2018/02/11 Javascript
Angular ui-roter 和AngularJS 通过 ocLazyLoad 实现动态(懒)加载模块和依赖
2018/11/25 Javascript
利用weixin-java-miniapp生成小程序码并直接返回图片文件流的方法
2019/03/29 Javascript
JS数据类型STRING使用实例解析
2019/12/18 Javascript
Bootstrap告警框(alert)实现弹出效果和短暂显示后上浮消失的示例代码
2020/08/27 Javascript
Python内置函数dir详解
2015/04/14 Python
Python编程之多态用法实例详解
2015/05/19 Python
Python RabbitMQ消息队列实现rpc
2018/05/30 Python
Python实现调用另一个路径下py文件中的函数方法总结
2018/06/07 Python
Python基础类继承重写实现原理解析
2020/04/03 Python
Python matplotlib 绘制双Y轴曲线图的示例代码
2020/06/12 Python
HTML5 SEO优化的一些建议
2020/08/27 HTML / CSS
英国豪华装饰照明品牌的在线零售商:Inspyer Lighting
2019/12/10 全球购物
毕业生多媒体设计求职信
2013/10/12 职场文书
英语专业毕业生自荐信范文
2013/12/31 职场文书
初中地理教学反思
2014/01/11 职场文书
令人印象深刻的自荐信
2014/05/25 职场文书
名人传读书笔记
2015/06/26 职场文书
交通安全教育主题班会
2015/08/12 职场文书
严以律己专题学习研讨会发言材料
2015/11/09 职场文书
世界文化遗产导游词
2019/08/07 职场文书