让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 相关文章推荐
BBS(php &amp; mysql)完整版(一)
Oct 09 PHP
PHP函数常用用法小结
Feb 08 PHP
php使HTML标签自动补全闭合函数代码
Oct 04 PHP
php生成随机颜色的方法
Nov 13 PHP
基于递归实现的php树形菜单代码
Nov 19 PHP
php+Mysqli利用事务处理转账问题实例
Feb 11 PHP
Smarty环境配置与使用入门教程
May 11 PHP
PHP常用文件操作函数和简单实例分析
Jun 03 PHP
PHP实现适用于文件内容操作的分页类
Jun 15 PHP
PHP 输出缓冲控制(Output Control)详解
Aug 25 PHP
使用ThinkPHP的自动完成实现无限级分类实例详解
Sep 02 PHP
php封装的单文件(图片)上传类完整实例
Oct 18 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生成curl命令行的方法
2015/12/14 PHP
CI框架(CodeIgniter)公共模型类定义与用法示例
2017/08/10 PHP
JavaScript获得选中文本内容的方法
2008/12/02 Javascript
js弹出的对话窗口永远保持居中显示
2012/12/15 Javascript
jquery 列表双向选择器之改进版
2013/08/09 Javascript
JS实现Enter键跳转及控件获得焦点
2013/08/12 Javascript
Javascript简单实现面向对象编程继承实例代码
2015/11/27 Javascript
AngularJS自定义服务与fliter的混合使用
2016/11/24 Javascript
JS正则RegExp.test()使用注意事项(不具有重复性)
2016/12/28 Javascript
nodejs6下使用koa2框架实例
2017/05/18 NodeJs
详解Vue学习笔记入门篇之组件的内容分发(slot)
2017/07/17 Javascript
如何将你的AngularJS1.x应用迁移至React的方法
2018/02/01 Javascript
自己动手封装一个React Native多级联动
2018/09/19 Javascript
中级前端工程师必须要掌握的27个JavaScript 技巧(干货总结)
2019/09/23 Javascript
Vue+Element-UI实现上传图片并压缩
2019/11/26 Javascript
简介JavaScript错误处理机制
2020/08/04 Javascript
python中MySQLdb模块用法实例
2014/11/10 Python
Python用户推荐系统曼哈顿算法实现完整代码
2017/12/01 Python
Django实现组合搜索的方法示例
2018/01/23 Python
PyTorch CNN实战之MNIST手写数字识别示例
2018/05/29 Python
python实现logistic分类算法代码
2020/02/28 Python
用canvas实现图片滤镜效果附演示
2013/11/05 HTML / CSS
美国知名户外用品畅销中心:Sierra Trading Post
2016/07/19 全球购物
Joie官方网上商店:购买服装和女装配饰
2018/06/05 全球购物
英国经济型酒店品牌:Travelodge
2019/12/17 全球购物
房产转让协议书
2014/04/11 职场文书
公安交警个人对照检查材料思想汇报
2014/10/01 职场文书
入股协议书范本
2014/11/01 职场文书
李白故里导游词
2015/02/12 职场文书
综合素质评价思想道德自我评价
2015/03/09 职场文书
车间质检员岗位职责
2015/04/08 职场文书
2015年车间管理工作总结
2015/07/23 职场文书
工作后的感想
2015/08/07 职场文书
离婚协议书范本(2016最新版)
2016/03/18 职场文书
据Python爬虫不靠谱预测可知今年双十一销售额将超过6000亿元
2021/11/11 Python
JavaWeb Servlet开发注册页面实例
2022/04/11 Java/Android