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获取网站域名和地址的代码
Aug 17 PHP
PHP 压缩文件夹的类代码
Nov 05 PHP
PHP下打开phpMyAdmin出现403错误的问题解决方法
May 23 PHP
PHP CURL 多线程操作代码实例
May 13 PHP
用PHP代码给图片加水印
Jul 01 PHP
Zend Framework框架路由机制代码分析
Mar 22 PHP
基于PHP制作验证码
Oct 12 PHP
Kindeditor编辑器添加图片上传水印功能(php代码)
Aug 03 PHP
ThinkPHP框架中使用Memcached缓存数据的方法
Mar 31 PHP
laravel excel 上传文件保存到本地服务器功能
Nov 14 PHP
laravel框架创建授权策略实例分析
Nov 22 PHP
php高性能日志系统 seaslog 的安装与使用方法分析
Feb 29 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
颠覆常识!无色透明的咖啡诞生了(中日双语)
2021/03/03 咖啡文化
PHP利用func_get_args和func_num_args函数实现函数重载实例
2014/11/12 PHP
php结合mysql与mysqli扩展处理事务的方法
2016/06/29 PHP
关于文本限制字数的js代码
2007/04/02 Javascript
初学JavaScript第二章
2008/09/30 Javascript
JavaScript 组件之旅(一)分析和设计
2009/10/28 Javascript
jquery重新播放css动画所遇问题解决
2013/08/21 Javascript
js的Prototype属性解释及常用方法
2014/05/08 Javascript
JavaScript资源预加载组件和滑屏组件的使用推荐
2016/03/10 Javascript
React.js入门实例教程之创建hello world 的5种方式
2016/05/11 Javascript
微信小程序 WXML、WXSS 和JS介绍及详解
2016/10/08 Javascript
jQuery实现动态文字搜索功能
2017/01/05 Javascript
JavaScript制作简易计算器(不用eval)
2017/02/05 Javascript
基于Vue、Vuex、Vue-router实现的购物商城(原生切换动画)效果
2018/01/09 Javascript
Vue之mixin全局的用法详解
2018/08/22 Javascript
通过js给网页加上水印背景实例
2019/06/17 Javascript
5分钟教你用nodeJS手写一个mock数据服务器的方法
2019/09/10 NodeJs
vue-router结合vuex实现用户权限控制功能
2019/11/14 Javascript
Vue中登录验证成功后保存token,并每次请求携带并验证token操作
2020/09/08 Javascript
vue-cli 关闭热更新操作
2020/09/18 Javascript
[03:51]吞吞映像 每周精彩击杀top10第二弹
2014/06/25 DOTA
[01:04]DOTA2:伟大的Roshan雕塑震撼来临
2015/01/30 DOTA
Python 文件操作技巧(File operation) 实例代码分析
2008/08/11 Python
用Python输出一个杨辉三角的例子
2014/06/13 Python
python查找指定具有相同内容文件的方法
2015/06/28 Python
Python的Django应用程序解决AJAX跨域访问问题的方法
2016/05/31 Python
Scrapy使用的基本流程与实例讲解
2018/10/21 Python
解决python opencv无法显示图片的问题
2018/10/28 Python
pandas对dataFrame中某一个列的数据进行处理的方法
2019/07/08 Python
vscode调试django项目的方法
2020/08/06 Python
国际经济与贸易专业大学生职业规划书
2014/03/01 职场文书
2014年9.18纪念日演讲稿
2014/09/14 职场文书
六年级作文之关于梦
2019/10/22 职场文书
【海涛DOTA解说】EVE女子战队独家录像加ZSMJ神牛两连发
2022/04/01 DOTA
Win11怎么修改电源模式?Win11修改电源模式的方法
2022/04/05 数码科技
css如何把元素固定在容器底部的四种方式
2022/06/16 HTML / CSS