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 相关文章推荐
解析zend Framework如何自动加载类
Jun 28 PHP
php文件上传的简单实例
Oct 19 PHP
php获取淘宝分类id示例
Jan 16 PHP
PHP小教程之实现链表
Jun 09 PHP
ThinkPHP中Session用法详解
Nov 29 PHP
PHP准确取得服务器IP地址的方法
Jun 02 PHP
PHP实现判断数组是一维、二维或几维的方法
Feb 06 PHP
php实时倒计时功能实现方法详解
Feb 27 PHP
PHP对称加密算法(DES/AES)类的实现代码
Nov 14 PHP
PHP实现一维数组与二维数组去重功能示例
May 24 PHP
php和C#的yield迭代器实现方法对比分析
Jul 17 PHP
laravel实现前后台路由分离的方法
Oct 13 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
让你同时上传 1000 个文件 (二)
2006/10/09 PHP
据说是雅虎的一份PHP面试题附答案
2009/01/07 PHP
PHP Static延迟静态绑定用法分析
2016/03/16 PHP
php中序列化与反序列化详解
2017/02/13 PHP
thinkPHP框架实现多表查询的方法
2018/06/14 PHP
smarty模板的使用方法实例分析
2019/09/18 PHP
phpstudy隐藏index.php的方法
2020/09/21 PHP
js AppendChild与insertBefore用法详细对比
2013/12/16 Javascript
js中substring和substr的定义和用法
2014/05/05 Javascript
JavaScript函数详解
2014/11/17 Javascript
AngularJS+Node.js实现在线聊天室
2015/08/28 Javascript
AngularJS路由实现页面跳转实例
2017/03/03 Javascript
jquery.rotate.js实现可选抽奖次数和中奖内容的转盘抽奖代码
2017/08/23 jQuery
Vue监听数据渲染DOM完以后执行某个函数详解
2018/09/11 Javascript
vue分页器组件编写方法详解
2019/06/28 Javascript
[01:01:22]VGJ.S vs OG 2018国际邀请赛淘汰赛BO3 第一场 8.22
2018/08/23 DOTA
用Python编写一个每天都在系统下新建一个文件夹的脚本
2015/05/04 Python
Django跨域请求问题的解决方法示例
2018/06/16 Python
python 制作自定义包并安装到系统目录的方法
2018/10/27 Python
Python实现多进程的四种方式
2019/02/22 Python
Python Matplotlib 基于networkx画关系网络图
2019/07/10 Python
python 叠加等边三角形的绘制的实现
2019/08/14 Python
Django ORM实现按天获取数据去重求和例子
2020/05/18 Python
pycharm-professional-2020.1下载与激活的教程
2020/09/21 Python
一款利用纯css3实现的超炫3D表单的实例教程
2014/12/01 HTML / CSS
canvas学习笔记之2d画布基础的实现
2019/02/21 HTML / CSS
美国著名童装品牌:OshKosh B’gosh
2016/08/05 全球购物
英国团购网站:Groupon英国
2017/11/28 全球购物
奥地利网上现代灯具和灯饰店:Lampenwelt.at
2018/01/29 全球购物
建筑毕业生自我鉴定
2013/10/18 职场文书
简单而又朴实的个人求职信分享
2013/12/12 职场文书
四群教育工作总结
2015/08/10 职场文书
7个你应该知道的JS原生错误类型
2021/04/29 Javascript
python中使用 unittest.TestCase单元测试的用例详解
2021/08/30 Python
口袋妖怪冰系十大最强精灵,几何雪花排第七,第六类似北极熊
2022/03/18 日漫
解决WINDOWS电脑开机后桌面没有任何图标
2022/04/09 数码科技