让codeigniter与swfupload整合的最佳解决方案


Posted in PHP onJune 12, 2014

codeigniter是一款轻量,便捷的MVC框架,最近的项目涉及到批量上传,于是,就是用了swfupload这个插件,虽然网上有很多关于ci与swfupload的帖子,不过,并不是很完整,所以,这里综合各家优点,经过自己实际经验,做了下整理。

问题1:获取不到文件类型?

回答: 由于SWFUPLOAD所有类型文件的MIME均为application/octet-stream,故使用Codeigniter自带的上传类无法准确获取是否为图片,根据ci官方的wiki已经给出了解答

In your view file, include the SWFUpload javascript file:

<script type="text/javascript" src="jscripts/SWFUpload/mmSWFUpload.js"></script> 
In your controller, pass “Filedata” as the name value for the do_upload function:
$this->upload->do_upload('Filedata') 
In your mimes.php file, add ‘application/octet-stream' for all allowed image formats
'gif'    =>    array('image/gif', 'application/octet-stream'),
'jpeg'    =>    array('image/jpeg', 'image/pjpeg', 'application/octet-stream'),
'jpg'    =>    array('image/jpeg', 'image/pjpeg', 'application/octet-stream'),
'jpe'    =>    array('image/jpeg', 'image/pjpeg', 'application/octet-stream'),
'png'    =>    array('image/png',  'image/x-png', 'application/octet-stream'),

问题2:带有session验证的后台,会导致上传后退出登陆的状况

回答:

一般方法:swfuplaod在上传时,会新开一个进程,和原来的进程不一致,要解决这个问题,需要指定session_id,然后在登录页面判断,如果有post过来的session_id,那么就用函数session_id( $_POST['PHP_SESSIONID'])指定一下。
上传页的JS里面,可以获取当前的SESSION_ID的。

ci中的状态:一般情况下,因为诸如uploadify,swfupload采用的都是flash客户端,这样它们产生的useragent与用户使用浏览器的user-agent必然不同。所以,虽然用户登录了你的系统产生了一个session,但是当触发上传程序时会产生另一个session(在上述useragent选项开启的情况下)。

所以,不是session丢失了,而是当你上传文件时,CI为uploadify另外创建了一个session。

解决方法1:将$config['sess_match_useragent']设置成FALSE,重试。

解决方法2(推荐):为了安全起见,不建议使用第1条解决方案,而是使用另外的验证方法,比如在每次上传时,在url中附加一个token与服务器端的token比对(比如这个token可以是用户名的hash值)。具体实现方法请参考stblog的上传验证实现(使用的是swfupload)。----我尝试了这个方法,重点在于,如果你的session类是放在autoload里自动加载的,那么,这样肯定是失败的,解决办法是,新建一个类,例如MY_Controller继承于CI_Controller,用于后台登陆,需要权限判断后台处理,讲upload类继承于CI_Controller这样的话,就不经过session类的验证了,当然上传还是得验证,不过可以用post_params传值进行验证:

示例:

class Upload extends CI_Controller {
//*******
//*****
}
//~~~~~~~~~~~~~~~~~
class client_photo extends MY_Controller {
    function __construct() {
        parent::__construct();
    }
 function index() {
}
}
//~~~~~~~~~~~~~~~~~~~~~
class MY_Controller extends CI_Controller {
    public function __construct() {
        parent::__construct();
        $this->load->library('session');
}
}
PHP 相关文章推荐
PHP取得一个类的属性和方法的实现代码
May 22 PHP
php自动获取字符串编码函数mb_detect_encoding
May 31 PHP
php数据结构与算法(PHP描述) 快速排序 quick sort
Jun 21 PHP
ThinkPHP中关联查询实例
Dec 02 PHP
PHP计算百度地图两个GPS坐标之间距离的方法
Jan 09 PHP
PHP将进程作为守护进程的方法
Mar 19 PHP
WordPress中缩略图的使用以及相关技巧
Nov 24 PHP
Zend Framework教程之前端控制器Zend_Controller_Front用法详解
Mar 07 PHP
php简单的上传类分享
May 15 PHP
详谈配置phpstorm完美支持Codeigniter(CI)代码自动完成(代码提示)
Apr 07 PHP
WHOOPS PHP调试库的使用
Sep 29 PHP
PHP树形结构tree类用法示例
Feb 01 PHP
Codeigniter实现处理用户登录验证后的URL跳转
Jun 12 #PHP
PHP 面向对象程序设计(oop)学习笔记 (五) - PHP 命名空间
Jun 12 #PHP
新浪SAE云平台下使用codeigniter的数据库配置
Jun 12 #PHP
Codeigniter整合Tank Auth权限类库详解
Jun 12 #PHP
PHP错误Cannot use object of type stdClass as array in错误的解决办法
Jun 12 #PHP
php自动识别文件编码并转换为UTF-8的方法
Jun 12 #PHP
codeigniter集成ucenter1.6双向通信的解决办法
Jun 12 #PHP
You might like
探讨fckeditor在Php中的配置详解
2013/06/08 PHP
php统计时间和内存使用情况示例分享
2014/03/13 PHP
PHP图像处理之使用imagecolorallocate()函数设置颜色例子
2014/11/19 PHP
php抽象方法和抽象类实例分析
2016/12/07 PHP
PHP实现的自定义图像居中裁剪函数示例【测试可用】
2017/08/11 PHP
jquery.boxy插件的iframe扩展代码
2010/07/02 Javascript
关于图片按比例自适应缩放的js代码
2011/10/30 Javascript
js获取判断上传文件后缀名的示例代码
2014/02/19 Javascript
JavaScript使用Replace进行字符串替换的方法
2015/04/14 Javascript
jQuery中Datatables增加跳转到指定页功能
2017/02/08 Javascript
javascript实现多张图片左右无缝滚动效果
2017/03/22 Javascript
基于Vue实现tab栏切换内容不断实时刷新数据功能
2017/04/13 Javascript
Vue.directive使用注意(小结)
2018/08/31 Javascript
小程序scroll-view组件实现滚动的示例代码
2018/09/20 Javascript
Nodejs实现微信分账的示例代码
2021/01/19 NodeJs
python通过正则查找微博@(at)用户的方法
2015/03/13 Python
复习Python中的字符串知识点
2015/04/14 Python
python网络编程调用recv函数完整接收数据的三种方法
2017/03/31 Python
Python-Seaborn热图绘制的实现方法
2019/07/15 Python
python单线程下实现多个socket并发过程详解
2019/07/27 Python
使用django和vue进行数据交互的方法步骤
2019/11/11 Python
Python hashlib加密模块常用方法解析
2019/12/18 Python
PyTorch 普通卷积和空洞卷积实例
2020/01/07 Python
python通用读取vcf文件的类(复制粘贴即可用)
2020/02/29 Python
Python内置方法和属性应用:反射和单例(推荐)
2020/06/19 Python
css3 线性渐变和径向渐变示例附图
2014/04/08 HTML / CSS
南非领先的在线旅行社:Travelstart南非
2016/09/04 全球购物
AT&T Wireless:手机、无限数据计划和配件
2018/06/03 全球购物
皇家阿尔伯特英国官方商店:Royal Albert骨瓷
2019/03/25 全球购物
先进事迹报告会主持词
2014/04/02 职场文书
应届生求职信
2014/05/31 职场文书
党性教育心得体会
2014/09/03 职场文书
后进基层党组织整改方案
2014/10/25 职场文书
义诊活动总结
2015/02/04 职场文书
2015年全国保险公众宣传日活动方案
2015/05/06 职场文书
2016年优秀班主任先进事迹材料
2016/02/26 职场文书