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 相关文章推荐
在字符串中把网址改成超级链接
Oct 09 PHP
PHP中函数内引用全局变量的方法
Oct 20 PHP
PHPMYADMIN 简明安装教程 推荐
Mar 07 PHP
php Notice: Undefined index 错误提示解决方法
Aug 29 PHP
php实例分享之html转为rtf格式
Jun 02 PHP
ThinkPHP CURD方法之where方法详解
Jun 18 PHP
php判断linux下程序问题实例
Jul 09 PHP
php时间计算相关问题小结
May 09 PHP
ThinkPHP5.0多个文件上传后找不到临时文件的修改方法
Jul 30 PHP
PHP中常见的密码处理方式和建议总结
Oct 14 PHP
PHP调用接口API封装的例子
Oct 11 PHP
TP5框架model常见操作示例小结【增删改查、聚合、时间戳、软删除等】
Apr 05 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
全国FM电台频率大全 - 9 上海市
2020/03/11 无线电
JAVA/JSP学习系列之六
2006/10/09 PHP
让Nginx支持ThinkPHP的URL重写和PATHINFO的方法分享
2011/08/08 PHP
php中删除数组的第一个元素和最后一个元素的函数
2015/03/07 PHP
php 伪造HTTP_REFERER页面URL来源的三种方法
2016/09/22 PHP
PHP递归统计系统中代码行数
2019/09/19 PHP
js函数使用技巧之 setTimeout(function(){},0)
2009/02/09 Javascript
JavaScript的public、private和privileged模式
2009/12/28 Javascript
JavaScript用Number方法实现string转int
2014/05/13 Javascript
jQuery后代选择器用法实例
2014/12/23 Javascript
javascript格式化json显示实例分析
2015/04/21 Javascript
浅析JavaScript Array和string的转换(推荐)
2016/05/20 Javascript
jQuery实现倒计时重新发送短信验证码功能示例
2017/01/12 Javascript
JavaScript数据结构之链表的实现
2017/03/19 Javascript
基于Vue实现tab栏切换内容不断实时刷新数据功能
2017/04/13 Javascript
浅谈JS函数节流防抖
2017/10/18 Javascript
vue src动态加载请求获取图片的方法
2018/10/17 Javascript
JavaScript设计模式之享元模式实例详解
2019/01/17 Javascript
微信小程序 确认框的实现(附代码)
2019/07/23 Javascript
详解vue beforeRouteEnter 异步获取数据给实例问题
2019/08/09 Javascript
微信小程序 组件的外部样式externalClasses使用详解
2019/09/06 Javascript
JavaScript实现背景自动切换小案例
2019/09/27 Javascript
详解vue中v-model和v-bind绑定数据的异同
2020/08/10 Javascript
Python实现的批量下载RFC文档
2015/03/10 Python
在Python程序和Flask框架中使用SQLAlchemy的教程
2016/06/06 Python
Python+MongoDB自增键值的简单实现
2016/11/04 Python
Python中str is not callable问题详解及解决办法
2017/02/10 Python
使用Python的turtle模块画图的方法
2017/11/15 Python
python操作小程序云数据库实现简单的增删改查功能
2019/06/06 Python
django drf框架自带的路由及最简化的视图
2019/09/10 Python
python实现word文档批量转成自定义格式的excel文档的思路及实例代码
2020/02/21 Python
python画图时设置分辨率和画布大小的实现(plt.figure())
2021/01/08 Python
汉米尔顿手表官网:Hamilton
2020/09/13 全球购物
《夜晚的实验》教学反思
2014/02/19 职场文书
婚前协议书标准版
2014/10/19 职场文书
2014年度考核工作总结
2014/12/24 职场文书