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 相关文章推荐
Erlang的运算符(比较运算符,数值运算符,移位运算符,逻辑运算符)
Jul 23 PHP
基于PHP编程注意事项的小结
Apr 27 PHP
PHP编码规范的深入探讨
Jun 06 PHP
CI(CodeIgniter)框架中的增删改查操作
Jun 10 PHP
php开启与关闭错误提示适用于没有修改php.ini的权限
Oct 16 PHP
Laravel模板引擎Blade中section的一些标签的区别介绍
Feb 10 PHP
php按单词截取字符串的方法
Apr 07 PHP
Linux操作系统安装LAMP环境
Jun 26 PHP
laravel 中如何使用ajax和vue总结
Aug 16 PHP
解决laravel-admin 自己新建页面里 js 需要刷新一次的问题
Oct 03 PHP
PHP实现简单的协程任务调度demo示例
Feb 01 PHP
PHP连接MySQL数据库操作代码实例解析
Jul 11 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
Zend studio for eclipse中使php可以调用mysql相关函数的设置方法
2008/10/13 PHP
PHP中获取变量的变量名的一段代码的bug分析
2011/07/07 PHP
linux下使用ThinkPHP需要注意大小写导致的问题
2011/08/02 PHP
解析mysql 表中的碎片产生原因以及清理
2013/06/22 PHP
php实现可以设置中奖概率的抽奖程序代码分享
2014/01/19 PHP
IE下通过a实现location.href 获取referer的值
2014/09/04 Javascript
js防止页面被iframe调用的方法
2014/10/30 Javascript
封装好的js判断操作系统与浏览器代码分享
2015/01/09 Javascript
js实现点击左右按钮轮播图片效果实例
2015/01/29 Javascript
深入理解JavaScript系列(28):设计模式之工厂模式详解
2015/03/03 Javascript
JavaScript实现SHA-1加密算法的方法
2015/03/11 Javascript
javascript HTML5 canvas实现打砖块游戏
2020/06/18 Javascript
jQuery ajax应用总结
2016/06/02 Javascript
微信小程序 wx.request(object) API详解及实例代码
2016/09/30 Javascript
NodeJS使用formidable实现文件上传
2016/10/27 NodeJs
微信小程序 出现错误:{"baseresponse":{"errcode":-80002,"errmsg":""}}解决办法
2017/02/23 Javascript
AngularJS 限定$scope的范围实例详解
2017/06/23 Javascript
JS实现判断图片是否加载完成的方法分析
2018/07/31 Javascript
js监听html页面的上下滚动事件方法
2018/09/11 Javascript
JS中的一些常用的函数式编程术语
2019/06/15 Javascript
用Python写冒泡排序代码
2016/04/12 Python
Python+selenium实现自动循环扔QQ邮箱漂流瓶
2018/05/29 Python
python自动化UI工具发送QQ消息的实例
2019/08/27 Python
python如果快速判断数字奇数偶数
2019/11/13 Python
Django中提示消息messages的设置方式
2019/11/15 Python
Django框架安装及项目创建过程解析
2020/09/14 Python
香港钟表珠宝首饰商城:OneMallTime网摩间
2016/10/14 全球购物
CK加拿大官网:Calvin Klein加拿大
2020/03/14 全球购物
北京振戎融通Java面试题
2015/09/03 面试题
工作表现自我评价
2014/02/08 职场文书
国际经济贸易专业自荐信
2014/06/13 职场文书
教师党员整改措施
2014/10/24 职场文书
2015年综治宣传月活动总结
2015/03/25 职场文书
2015年村级财务管理制度
2015/08/04 职场文书
Win11如何修改dns?Win11修改dns图文教程
2022/01/18 数码科技
Python实现仓库管理系统
2022/05/30 Python