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 相关文章推荐
UTF8编码内的繁简转换的PHP类
Jul 09 PHP
关于php curl获取301或302转向的网址问题的解决方法
Jun 02 PHP
用PHP书写安全的脚本代码
Feb 05 PHP
Zend的Registry机制的使用说明
May 02 PHP
php使用cookie保存用户登录的用户名实例
Jan 26 PHP
php基于GD库画五星红旗的方法
Feb 24 PHP
Symfony2学习笔记之控制器用法详解
Mar 17 PHP
php生成图片验证码的方法
Apr 15 PHP
PHP中include()与require()的区别说明
Feb 14 PHP
php json转换相关知识(小结)
Dec 21 PHP
php查询内存信息操作示例
May 09 PHP
PHP获取php,mysql,apche的版本信息及更多服务器信息
Mar 09 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页面实现定时跳转的方法
2014/10/31 PHP
php使用Image Magick将PDF文件转换为JPG文件的方法
2015/04/01 PHP
PHPTree――php快速生成无限级分类
2018/03/30 PHP
javascript中万恶的function实例分析
2011/05/25 Javascript
基于jquery自定义图片热区效果
2012/07/21 Javascript
js 定时器setTimeout无法调用局部变量的解决办法
2013/11/28 Javascript
javascript 面向对象封装与继承
2014/11/27 Javascript
JavaScript创建一个object对象并操作对象属性的用法
2015/03/23 Javascript
简单谈谈javascript Date类型
2015/09/06 Javascript
confirm确认对话框的实现方法总结
2016/06/17 Javascript
Vue.js表单控件实践
2016/10/27 Javascript
分类解析jQuery选择器
2016/11/23 Javascript
完美解决spring websocket自动断开连接再创建引发的问题
2017/03/02 Javascript
js实现3D图片展示效果
2017/03/09 Javascript
Vue+axios 实现http拦截及路由拦截实例
2017/04/25 Javascript
解决Idea、WebStorm下使用Vue cli脚手架项目无法使用Webpack别名的问题
2019/10/11 Javascript
VUE解决 v-html不能触发点击事件的问题
2019/10/28 Javascript
jquery实现图片无缝滚动 蒙版遮蔽效果
2020/01/11 jQuery
python+selenium+autoit实现文件上传功能
2017/08/23 Python
基于Python Numpy的数组array和矩阵matrix详解
2018/04/04 Python
numpy 进行数组拼接,分别在行和列上合并的实例
2018/05/08 Python
Python简单定义与使用二叉树示例
2018/05/11 Python
python3模块smtplib实现发送邮件功能
2018/05/22 Python
tensorflow实现对张量数据的切片操作方式
2020/01/19 Python
无惧面试,带你搞懂python 装饰器
2020/08/17 Python
Python使用grequests并发发送请求的示例
2020/11/05 Python
HTML5使用DOM进行自定义控制示例代码
2013/06/08 HTML / CSS
美国在线轮胎零售商:SimpleTire
2019/04/08 全球购物
小学新学期寄语
2014/04/02 职场文书
六一亲子活动总结
2014/07/01 职场文书
综合实践活动报告
2015/02/05 职场文书
项目投资意向书范本
2015/05/09 职场文书
新娘父亲婚礼致辞
2015/07/27 职场文书
Python 中数组和数字相乘时的注意事项说明
2021/05/10 Python
Mysql中有关Datetime和Timestamp的使用总结
2021/12/06 MySQL
CentOS7设置ssh服务以及端口修改方式
2022/12/24 Servers