让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动态创建Flash动画
Oct 09 PHP
随时给自己贴的图片加文字的php水印
Mar 16 PHP
PHP加速 eAccelerator配置和使用指南
Jun 05 PHP
PHP动态分页函数,PHP开发分页必备啦
Nov 07 PHP
解析php常用image图像函数集
Jun 24 PHP
限制ckeditor上传图片文件大小的方法
Nov 15 PHP
ThinkPHP控制器详解
Jul 27 PHP
YII框架中使用memcache的方法详解
Aug 02 PHP
php插件Xajax使用方法详解
Aug 31 PHP
PHP实现的简单路由和类自动加载功能
Mar 13 PHP
PHP设计模式之原型设计模式原理与用法分析
Apr 25 PHP
PHP7新特性
Mar 09 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
PHP采用get获取url汉字出现乱码的解决方法
2014/11/13 PHP
Yii2前后台分离及migrate使用(七)
2016/05/04 PHP
form自动提交实例讲解
2017/07/10 PHP
javascript Ext JS 状态默认存储时间
2009/02/15 Javascript
img标签中onerror用法
2009/08/13 Javascript
文本框的字数限制功能jquery插件
2009/11/24 Javascript
jquery实现在光标位置插入内容的方法
2015/02/05 Javascript
jquery中的工具使用方法$.isFunction, $.isArray(), $.isWindow()
2015/08/09 Javascript
JavaScript中的数据类型转换方法小结
2015/10/26 Javascript
Bootstrap中定制LESS-颜色及导航条(推荐)
2016/11/21 Javascript
Vue通过input筛选数据
2020/10/26 Javascript
详解webpack解惑:require的五种用法
2017/06/09 Javascript
通过源码分析Vue的双向数据绑定详解
2017/09/24 Javascript
探讨Vue.js的组件和模板
2017/10/27 Javascript
JavaScript实现异步图像上传功能
2018/07/12 Javascript
个人小程序接入支付解决方案
2019/05/23 Javascript
微信小程序如何实现精确的日期时间选择器
2020/01/21 Javascript
python基于右递归解决八皇后问题的方法
2015/05/25 Python
python自带的http模块详解
2016/11/06 Python
python一键升级所有pip package的方法
2017/01/16 Python
Python实现的拉格朗日插值法示例
2019/01/08 Python
pytorch中图像的数据格式实例
2020/02/11 Python
vue学习笔记之动态组件和v-once指令简单示例
2020/02/29 Python
python实现用户名密码校验
2020/03/18 Python
详解python with 上下文管理器
2020/09/02 Python
详解基于Facecognition+Opencv快速搭建人脸识别及跟踪应用
2021/01/21 Python
美国最大的珠宝商之一:Littman Jewelers
2016/11/13 全球购物
请问软件开发中的设计模式你会使用哪些
2015/05/13 面试题
财务工作个人求职的自我评价
2013/12/19 职场文书
学期研究性学习个人的自我评价
2014/01/09 职场文书
《搭石》教学反思
2014/04/07 职场文书
消防安全责任书
2014/04/14 职场文书
演讲稿开场白台词
2014/08/25 职场文书
学校拾金不昧表扬信
2015/01/16 职场文书
员工自我工作评价
2015/03/06 职场文书
银行催款通知书
2015/04/17 职场文书