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 5昨天隆重推出--PHP 5/Zend Engine 2.0新特性
Oct 09 PHP
PHP安全技术之 实现php基本安全
Sep 04 PHP
php错误、异常处理机制(补充)
May 07 PHP
深入理解ob_flush和flush的区别(ob_flush()与flush()使用方法)
Feb 06 PHP
phpExcel中文帮助手册之常用功能指南
Aug 18 PHP
PHP实现HTML生成PDF文件的方法
Nov 07 PHP
thinkphp配置连接数据库技巧
Dec 02 PHP
PHP实现过滤掉非汉字字符只保留中文字符
Jun 04 PHP
php析构函数的简单使用说明
Aug 24 PHP
PHP单链表的实现代码
Jul 05 PHP
PHP 实现人民币小写转换成大写的方法及大小写转换函数
Nov 17 PHP
PHP检查文件是否存在,不存在自动创建及读取文件内容操作示例
Jan 23 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写MySQL数据 实现代码
2009/06/15 PHP
用PHP实现Ftp用户的在线管理
2012/02/16 PHP
Zend Framework分发器用法示例
2016/12/11 PHP
PHP 进度条函数的简单实例
2017/09/19 PHP
PHP类与对象后期静态绑定操作实例详解
2018/12/20 PHP
Swoole4.4协程抢占式调度器详解
2019/05/23 PHP
表单(FORM)的一些实用效果代码
2007/03/25 Javascript
Prototype使用指南之selector.js说明
2008/10/26 Javascript
setTimeout和setInterval的区别你真的了解吗?
2011/03/31 Javascript
Nodejs实现的一个简单udp广播服务器、客户端
2014/09/25 NodeJs
jQuery.extend 函数及用法详细
2015/09/06 Javascript
JavaScript中的ajax功能的概念和示例详解
2016/10/17 Javascript
利用jQuery.Validate异步验证用户名是否存在(推荐)
2016/12/09 Javascript
nodejs使用express创建一个简单web应用
2017/03/31 NodeJs
Vue表单验证插件的制作过程
2017/04/01 Javascript
React学习笔记之列表渲染示例详解
2017/08/22 Javascript
基于JavaScript实现新增内容滚动播放效果附完整代码
2017/08/24 Javascript
vue移动UI框架滑动加载数据的方法
2018/03/12 Javascript
微信小程序实现折叠展开效果
2018/07/19 Javascript
解决vue keep-alive 数据更新的问题
2018/09/21 Javascript
3分钟读懂移动端rem使用方法(推荐)
2019/05/06 Javascript
前端 javascript 实现文件下载的示例
2020/11/24 Javascript
在Django的视图(View)外使用Session的方法
2015/07/23 Python
python numpy格式化打印的实例
2018/05/14 Python
详解Python if-elif-else知识点
2018/06/11 Python
Windows下python3.7安装教程
2018/07/31 Python
详解python中自定义超时异常的几种方法
2019/07/29 Python
浅析python内置模块collections
2019/11/15 Python
django实现HttpResponse返回json数据为中文
2020/03/27 Python
如何一键升级Python所有包
2020/11/05 Python
《自选商场》教学反思
2014/02/14 职场文书
集团公司党的群众路线教育实践活动工作总结
2014/03/03 职场文书
驾驶员培训方案
2014/05/01 职场文书
卖房授权委托书样本
2014/10/05 职场文书
个人整改方案范文
2014/10/25 职场文书
Java使用httpRequest+Jsoup爬取红蓝球号码
2021/07/02 Java/Android