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 相关文章推荐
网页游戏开发入门教程三(简单程序应用)
Nov 02 PHP
php curl post 时出现的问题解决
Jan 30 PHP
PHP整数取余返回负数的相关解决方法
May 15 PHP
常用PHP数组排序函数归纳
Aug 08 PHP
PHP实现的自定义数组排序函数与排序类示例
Nov 18 PHP
PHP使用递归算法无限遍历数组示例
Jan 13 PHP
PHP递归删除多维数组中的某个值
Apr 17 PHP
浅谈Yii乐观锁的使用及原理
Jul 25 PHP
PHP使用Redis实现Session共享的实现示例
May 12 PHP
PHP创建XML的方法示例【基于DOMDocument类及SimpleXMLElement类】
Sep 10 PHP
PHP cookie与session会话基本用法实例分析
Nov 18 PHP
thinkphp框架无限级栏目的排序功能实现方法示例
Mar 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分页代码实例
2013/10/24 PHP
php获取新浪微博数据API实例
2013/11/12 PHP
thinkphp中空模板与空模块的用法实例
2014/11/26 PHP
分享ThinkPHP3.2中关联查询解决思路
2015/09/20 PHP
jquery $(document).ready() 与window.onload的区别
2009/12/28 Javascript
JavaScript 学习技巧
2010/02/17 Javascript
Jquery ThickBox插件使用心得(不建议使用)
2010/09/08 Javascript
javascript的parseFloat()方法精度问题探讨
2013/11/26 Javascript
nodejs命令行参数处理模块commander使用实例
2014/09/17 NodeJs
js判断某个方法是否存在实例代码
2015/01/10 Javascript
jquery隔行换色效果实现方法
2015/01/15 Javascript
jQuery内容过滤选择器用法分析
2015/02/10 Javascript
javascript实现选中复选框后相关输入框变灰不可用的方法
2015/08/11 Javascript
Web前端开发工具——bower依赖包管理工具
2016/03/29 Javascript
jQuery Validate 数组 全部验证问题
2017/01/12 Javascript
canvas实现流星雨的背景效果
2017/01/13 Javascript
jQuery+ThinkPHP+Ajax实现即时消息提醒功能实例代码
2017/03/21 jQuery
基于HTML5+JS实现本地图片裁剪并上传功能
2017/03/24 Javascript
Vue.js递归组件构建树形菜单
2017/12/24 Javascript
vue-router懒加载速度缓慢问题及解决方法
2018/11/25 Javascript
9种方法优化jQuery代码详解
2020/02/04 jQuery
vue实现前端列表多条件筛选
2020/10/26 Javascript
[02:33]2014DOTA2 TI每日综述 LGD涉险晋级DK闯入胜者组
2014/07/14 DOTA
[48:02]Ti4循环赛第三日 VG vs Liquid和NEWBEE vs DK
2014/07/12 DOTA
对python自动生成接口测试的示例讲解
2018/11/30 Python
Python读写文件基础知识点
2019/06/10 Python
Python queue队列原理与应用案例分析
2019/09/27 Python
python网络爬虫 Scrapy中selenium用法详解
2019/09/28 Python
纽约著名的服装辅料来源:M&J Trimming
2017/07/26 全球购物
西安当代医院管理研究院笔试题
2015/12/11 面试题
软件测试工程师笔试题带答案
2015/03/27 面试题
中软国际Java程序员笔试题
2014/07/19 面试题
《猫》教学反思
2014/02/26 职场文书
伊索寓言读书笔记
2015/06/30 职场文书
2015中学教学工作总结
2015/07/22 职场文书
MySQL运行报错:“Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggre”解决方法
2022/06/14 MySQL