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判断图片格式的七种方法小结
Jun 03 PHP
探讨:如何使用PhpDocumentor生成文档
Jun 25 PHP
两种php实现图片上传的方法
Jan 22 PHP
PHP下使用mysqli的函数连接mysql出现warning: mysqli::real_connect(): (hy000/1040): ...
Feb 14 PHP
thinkPHP5 tablib标签库自定义方法详解
May 10 PHP
由php中字符offset特征造成的绕过漏洞详解
Jul 07 PHP
Laravel 5.4向IoC容器中添加自定义类的方法示例
Aug 15 PHP
PHP实现的AES双向加密解密功能示例【128位】
Sep 03 PHP
Linux下 php7安装redis的方法
Nov 01 PHP
php伪静态验证码不显示的解决方案
Sep 26 PHP
微信小程序发送订阅消息的方法(php 为例)
Oct 30 PHP
PHP类的自动加载与命名空间用法实例分析
Jun 05 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/06/08 PHP
ASP.NET jQuery 实例9  通过控件hyperlink实现返回顶部效果
2012/02/03 Javascript
使用jquery mobile做幻灯播放效果实现步骤
2013/01/04 Javascript
Javascript 拖拽雏形(逐行分析代码,让你轻松了拖拽的原理)
2015/01/23 Javascript
javascript实现删除前弹出确认框
2015/06/04 Javascript
js模仿php中strtotime()与date()函数实现方法
2015/08/11 Javascript
详解JavaScript基于面向对象之创建对象(1)
2015/12/10 Javascript
JQuery实现Ajax加载图片的方法
2015/12/24 Javascript
JS动态给对象添加属性和值的实现方法
2016/10/21 Javascript
详解为Angular.js内置$http服务添加拦截器的方法
2016/12/20 Javascript
详解如何在NodeJS项目中优雅的使用ES6
2017/04/22 NodeJs
react-native使用leanclound消息推送的方法
2018/08/06 Javascript
node.js实现为PDF添加水印的示例代码
2018/12/05 Javascript
详解基于mpvue微信小程序下载远程图片到本地解决思路
2019/05/16 Javascript
浅谈layui数据表格判断问题(加入表单元素),设置单元格样式
2019/10/26 Javascript
vue 全局环境切换问题
2019/10/27 Javascript
taro 实现购物车逻辑的实例代码
2020/06/05 Javascript
javascript实现电商放大镜效果
2020/11/23 Javascript
Python 批量合并多个txt文件的实例讲解
2018/05/08 Python
Python装饰器用法实例总结
2018/05/26 Python
Django模型修改及数据迁移实现解析
2019/08/01 Python
python多任务之协程的使用详解
2019/08/26 Python
Python树莓派学习笔记之UDP传输视频帧操作详解
2019/11/15 Python
python实现俄罗斯方块游戏(改进版)
2020/03/13 Python
html5理解head_动力节点Java学院整理
2017/07/13 HTML / CSS
椰子猫砂:CatSpot
2018/08/27 全球购物
澳大利亚工具仓库:Tools Warehouse
2018/10/15 全球购物
英国领先的体验日提供商:Buyagift
2019/04/19 全球购物
TCP/IP的分层模型
2013/10/27 面试题
5s推行计划书
2014/05/06 职场文书
疾病捐款倡议书
2014/05/13 职场文书
小学生五一劳动节演讲稿
2015/03/18 职场文书
2015年收银员个人工作总结
2015/04/01 职场文书
golang 如何用反射reflect操作结构体
2021/04/28 Golang
javascript函数式编程基础
2021/09/15 Javascript
利用js实现简单开关灯代码
2021/11/23 Javascript