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注入实例
Oct 09 PHP
用php或asp创建网页桌面快捷方式的代码
Mar 23 PHP
PHP操作MongoDB时的整数问题及对策说明
May 02 PHP
PHP imagecreatefrombmp 从BMP文件或URL新建一图像
Jul 16 PHP
input file获得文件根目录简单实现
Apr 26 PHP
Chrome Web App开发小结
Sep 04 PHP
thinkphp的静态缓存用法分析
Nov 29 PHP
两个php日期控制类实例
Dec 09 PHP
Yii框架调试心得--在页面输出执行sql语句
Dec 25 PHP
CodeIgniter控制器之业务逻辑实例分析
Jan 20 PHP
php+ajax注册实时验证功能
Jul 20 PHP
laravel 输出最后执行sql 附:whereIn的使用方法
Oct 10 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使用Jpgraph绘制复杂X-Y坐标图的方法
2015/06/10 PHP
php array_multisort 对数组进行排序详解及实例代码
2016/10/27 PHP
PHP简单实现模拟登陆功能示例
2017/09/15 PHP
php支付宝APP支付功能
2020/07/29 PHP
PHP获取php,mysql,apche的版本信息及更多服务器信息
2021/03/09 PHP
向fckeditor编辑器插入指定代码的方法
2007/05/25 Javascript
基于jQuery的可以控制左右滚动及自动滚动效果的代码
2010/07/25 Javascript
JQuery里选择超链接的实现代码
2011/05/22 Javascript
Javascript 加载和执行-性能提高篇
2012/12/28 Javascript
javaScript(JS)替换节点实现思路介绍
2013/04/17 Javascript
jQuery实现长按按钮触发事件的方法
2015/02/02 Javascript
jQuery插件AjaxFileUpload实现ajax文件上传
2016/05/05 Javascript
JavaScript  event对象整理及详细介绍
2016/10/10 Javascript
浅谈javascript alert和confirm的美化
2016/12/15 Javascript
jQuery Ajax使用FormData上传文件和其他数据后端web.py获取
2017/06/11 jQuery
webpack打包node.js后端项目的方法
2018/03/10 Javascript
Angular封装搜索框组件操作示例
2019/04/25 Javascript
[04:45]上海特级锦标赛主赛事第三日TOP10
2016/03/05 DOTA
[46:16]2018DOTA2亚洲邀请赛3月30日 小组赛B组 iG VS VP
2018/03/31 DOTA
Python 实现数据库(SQL)更新脚本的生成方法
2017/07/09 Python
python 将list转成字符串,中间用符号分隔的方法
2018/10/23 Python
python导包的几种方法(自定义包的生成以及导入详解)
2019/07/15 Python
解决Python正则表达式匹配反斜杠''\''问题
2019/07/17 Python
ubuntu上安装python的实例方法
2019/09/30 Python
Django 后台带有字典的列表数据与页面js交互实例
2020/04/03 Python
Python退出时强制运行一段代码的实现方法
2020/04/29 Python
大学生求职简历的自我评价范文
2013/10/12 职场文书
大学生个人推荐信范文
2013/11/25 职场文书
青年文明号事迹材料
2014/01/18 职场文书
旅游个人求职信范文
2014/01/30 职场文书
老师对学生的寄语
2014/04/09 职场文书
2015年元宵节活动总结
2015/02/06 职场文书
小学音乐课歌曲《堆雪人》教学反思
2016/02/18 职场文书
情况说明书格式及范文
2019/06/24 职场文书
关于企业的执行力标语大全
2020/01/06 职场文书
使用python绘制横竖条形图
2022/04/21 Python