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中最容易忘记的一些知识点总结
Apr 28 PHP
解析CodeIgniter自定义配置文件
Jun 18 PHP
PHP获取当前页面URL函数实例
Oct 22 PHP
浅析php创建者模式
Nov 25 PHP
浅谈php自定义错误日志
Feb 13 PHP
为你总结一些php信息函数
Oct 21 PHP
php提交过来的数据生成为txt文件
Apr 28 PHP
全面了解PHP中的全局变量
Jun 17 PHP
php使用curl实现ftp文件下载功能
May 16 PHP
laravel框架实现为 Blade 模板引擎添加新文件扩展名操作示例
Jan 25 PHP
Yii 框架使用Forms操作详解
May 18 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
PHPer 需要了解的 5 个 Composer 小技巧
2014/08/18 PHP
PHP模块memcached使用指南
2014/12/08 PHP
php中PDO方式实现数据库的增删改查
2015/05/17 PHP
PHP Imagick完美实现图片裁切、生成缩略图、添加水印
2016/02/22 PHP
使用PHP免费发送定时短信的实例
2016/10/24 PHP
yii插入数据库防并发的简单代码
2017/05/27 PHP
PHP简单实现欧拉函数Euler功能示例
2017/11/06 PHP
PHP的mysqli_sqlstate()函数讲解
2019/01/23 PHP
JavaScript 操作键盘的Enter事件(键盘任何事件),兼容多浏览器
2010/10/11 Javascript
浅谈nodeName,nodeValue,nodeType,typeof 的区别
2015/01/13 Javascript
JavaScript实现标题栏文字轮播效果代码
2015/10/24 Javascript
分享一些常用的jQuery动画事件和动画函数
2015/11/27 Javascript
JS锚点的设置与使用方法
2016/09/05 Javascript
对javascript继承的理解
2016/10/11 Javascript
自定义require函数让浏览器按需加载Js文件
2016/11/24 Javascript
js实现拖拽功能
2017/03/01 Javascript
Bootstrap fileinput组件封装及使用详解
2017/03/10 Javascript
简单实现jquery隔行变色
2017/11/09 jQuery
ng-events类似ionic中Events的angular全局事件
2018/09/05 Javascript
如何制作一个Node命令行图像识别工具
2018/12/12 Javascript
React通过redux-persist持久化数据存储的方法示例
2019/02/14 Javascript
精读《Vue3.0 Function API》
2020/05/20 Javascript
JavaScript点击按钮生成4位随机验证码
2021/01/28 Javascript
基于Python 的进程管理工具supervisor使用指南
2016/09/18 Python
python增加矩阵维度的实例讲解
2018/04/04 Python
Python决策树之基于信息增益的特征选择示例
2018/06/25 Python
正确理解Python中if __name__ == '__main__'
2019/01/24 Python
Python基础之条件控制操作示例【if语句】
2019/03/23 Python
Python OpenCV 使用滑动条来调整函数参数的方法
2019/07/08 Python
使用pycharm在本地开发并实时同步到服务器
2019/08/02 Python
详解如何用canvas画一个微笑的表情
2019/03/14 HTML / CSS
英国门把手公司:Door Handle Company
2019/05/12 全球购物
什么是WEB控件?使用WEB控件有哪些优势?
2012/01/21 面试题
离婚协议书范本(通用篇)
2014/11/30 职场文书
聚众斗殴罪辩护词
2015/05/21 职场文书
不想升级Win11?教你彻底锁定老版Windows系统的方法(附下载地址)
2022/09/23 数码科技