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 相关文章推荐
第七节--类的静态成员
Nov 16 PHP
PHP小技巧搜集,每个PHPer都来露一手
Jan 02 PHP
php设计模式 State (状态模式)
Jun 26 PHP
提示Trying to clone an uncloneable object of class Imagic的解决
Oct 27 PHP
PHP 安全检测代码片段(分享)
Jul 05 PHP
php中in_array函数用法探究
Nov 25 PHP
PHP简单实现HTTP和HTTPS跨域共享session解决办法
May 27 PHP
PHP使用正则表达式获取微博中的话题和对象名
Jul 18 PHP
解决nginx不支持thinkphp中pathinfo的问题
Jul 21 PHP
php中Redis的应用--消息传递
Mar 28 PHP
PHP count()函数讲解
Feb 03 PHP
PHP7 mongoDB扩展使用的方法分享
May 02 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/11/17 PHP
php实现比较全的数据库操作类
2015/06/18 PHP
php编程实现简单的网页版计算器功能示例
2017/04/26 PHP
php readfile下载大文件失败的解决方法
2017/05/22 PHP
PHP Ajax跨域问题解决方案代码实例
2020/08/01 PHP
JavaScript入门教程(5) js Screen屏幕对象
2009/01/31 Javascript
js判断url是否有效的两种方法
2014/03/04 Javascript
使用Chrome调试JavaScript的断点设置和调试技巧
2014/12/16 Javascript
EasyUI中datagrid在ie下reload失败解决方案
2015/03/09 Javascript
Jquery日历插件制作简单日历
2015/10/28 Javascript
jQuery插件实现适用于移动端的地址选择器
2016/02/18 Javascript
Jquery Easyui日历组件Calender使用详解(23)
2016/12/18 Javascript
JavaScript使用简单正则表达式的数据验证功能示例
2017/01/13 Javascript
javascript数据结构中栈的应用之符号平衡问题
2017/04/11 Javascript
vue-cli 默认路由再子路由选中下的选中状态问题及解决代码
2018/09/06 Javascript
webpack的pitching loader详解
2019/09/23 Javascript
基于iview-admin实现动态路由的示例代码
2019/10/02 Javascript
Vue 监听元素前后变化值实例
2020/07/29 Javascript
JS变量提升及函数提升实例解析
2020/09/03 Javascript
[13:18]《一刀刀一天》之DOTA全时刻21:详解TI新赛制 A队再露獠牙
2014/06/24 DOTA
下载安装setuptool和pip linux安装pip    
2014/01/24 Python
Python中的闭包总结
2014/09/18 Python
Python3.5面向对象与继承图文实例详解
2019/04/24 Python
tensorflow mnist 数据加载实现并画图效果
2020/02/05 Python
Django 解决开发自定义抛出异常的问题
2020/05/21 Python
PyQt5.6+pycharm配置以及pyinstaller生成exe(小白教程)
2020/06/02 Python
Python Mock模块原理及使用方法详解
2020/07/07 Python
python 实现数据库中数据添加、查询与更新的示例代码
2020/12/07 Python
世界第一曲奇连锁店:Mrs. Fields Cookies
2017/02/04 全球购物
Asics日本官网:鬼冢八喜郎创立的跑鞋运动品牌
2017/10/18 全球购物
英国儿童鞋和靴子:Start-Rite
2019/05/06 全球购物
Bed Bath & Beyond加拿大官网:购买床上用品、浴巾、厨房电器等
2019/10/04 全球购物
法英专业大学生职业生涯规划书范文
2014/09/22 职场文书
2015年商场工作总结
2015/04/27 职场文书
python爬取豆瓣电影TOP250数据
2021/05/23 Python
SQL Server数据库查询出现阻塞之性能调优
2022/04/10 SQL Server