问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

thinkphp 怎样用ftp上传文件

发布网友 发布时间:2022-04-07 04:51

我来回答

2个回答

懂视网 时间:2022-04-07 09:13

图片上传功能应该是个极为普遍的,在此参考了 ThinkPHP 框架中的集成方法整理了一下 FTP图片的上传功能,这样方便在后台操作时,把有关的图片直接上传到线上的图片服务器,避免大流量访问的图片加载缓慢,降低网站的访问压力。

1、前端设计

这里主要为了测试功能的实现,使用最简单的设计,既方便参考又有利于后期的功能扩展。如下附 upload.html主要代码,着重注意红框圈出的代码,其中 css样式比较简单,需要的可以参考后面的源代码。

1.jpg

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 OrgNetUpload($img, $imgUrl);
 return $upload->main();
 }
}

FTP上传文件函数

function ftp_upload($remotefile,$localfile){
 $ftp = new ThinkFtp();
 $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、操作截图

2.jpg

3.jpg

7、提示

对于这份参考代码,涉及到的公共方法 handleImg()会先将需要上传的图片传到当前操作的网站根目录,之后又会通过 ftp_upload()将图片传到对应的图片FTP服务器,从实现步骤上看第一步多余,主要是开发过程中的测试服务器不符合FTP账号要求,同时又要方便线上内容修改的及时更新。

推荐教程:《TP5》

热心网友 时间:2022-04-07 06:21

? 敌后武工队 ( 2004)? 蜜月再来 ( 1992)? 女子戒毒所 ( 1992)? 追杀刑警 ( 1988)? 湘西剿匪记 ( 1986)
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
宣称窗帘可“空气净化”,宜家被罚172.5万,此前还收到过哪些罚单?_百度... 打开CAD2006出现fail to get commcntrcontroller怎么解决 启动cad2006时出现'failtogetcommcntrcontroller"怎么解决啊?是什么... 删除C:\Program Files\AutoCAD2004\WSCommCntrAcCon.arx有什么影响 CAD启动时出现fail to get CommcntrController 怎么解决? 启动cad2006时出现'fail to get commcntrcontroller"怎么解决啊?是什么... ...电脑,买哪种划算啊 ,主要 玩游戏,挂Q偶尔看电影 你们上网都干什么啊 ...我上网主要是浏览网页,挂Q和人人,看视频,电影,电视剧什么的,请问... 天天看播放器是什么格式?我想用平板电脑下载来看电视和电影可以吗?还有... 我用的美图手机 安装好了软件屏幕上没有啊 从哪里找到 美图秀秀手机4的照片隐藏了,如何显示 梦见父母为自己准备后事意味着有什么不好的事发生? 美图t8怎么样隐藏应用 没有找到访问权限? 梦见爸爸为妈妈准备身后事,自己哭醒了。 美图怎么隐藏手机软件? 美图秀秀从屏幕移除,怎样才能找到美图秀秀? 美图手机自带软件(计算器)和下载的软件都隐藏了 请问怎么拖回桌面 对方快手把我拉黑了收藏对方作品会有提示吗- 问一问 快手里加入到黑名单去访问他他会知道吗 虎皮兰开花吗?附虎皮兰的养殖方法 快手把对方拉黑对方还能看到你的动态吗? 虎皮兰会开花吗 wps表格怎么把多行合并成一行 虎皮兰开花吗 虎皮兰花几年一开花 虎皮兰几年开花 虎皮兰会开花吗?如何养才会开花呢? 你好,使用ftp怎么上传文件到thinkphp生成的目录里面呢? 定期取不出,急用咋办? 美图手机的安全软件在哪?怎么取消拦截? 美图手机的安全软件在哪?怎么取消拦截 平板微信怎么没有群直播 三星笔记本开机进入bios是什么原因 三星笔记本一直无限进入bios界面无法退出怎么办 三星笔记本一直无限进入bios界面无法退出怎么办?按了F10没有用还是一直进入 三星电脑开机一直在bios界面 三星07年的电脑开机自动进BIOS? 三星笔记本电脑开机时出现samsungbiosconfiguration怎么办? 三星笔记本启动后直接进bios无法进入系统,是哪里出问题了 三星笔记本电脑开机一直进入bios界面进不了桌面怎么办也无法从新安装系统 三星电脑进入bios 三星笔记本电脑R467开机直接进bios怎么办? 三星笔记本开机总是自动进入BIOS,求解。 三星电脑进入bios怎么退出 三星电脑开机就进入aptio setup,而且我的BIOS页面和其它网友的界面不太一样,有大神可以帮我看看吗? 三星Samsung笔记本电脑开机进入BIOS的方法与BIOS设置全功能菜单? 三星笔记本电脑开机出现ACPI BIOS ERROR怎么办? 在用PR剪辑时,50帧的视频,输出25帧是什么机制? 视频剪辑软件哪款好用