让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 多维数组排序实现代码
Aug 05 PHP
PHP 函数学习简单小结
Jul 08 PHP
php判断输入不超过mysql的varchar字段的长度范围
Jun 24 PHP
linux命令之调试工具strace的深入分析
Jun 03 PHP
php在linux下检测mysql同步状态的方法
Jan 15 PHP
php模板引擎技术简单实现
Mar 15 PHP
php调用自己java程序的方法详解
May 13 PHP
php实现常见图片格式的水印和缩略图制作(面向对象)
Jun 15 PHP
php 读取文件夹下所有图片、文件的实例
Oct 17 PHP
laravel 关联关系遍历数组的例子
Oct 10 PHP
laravel 数据验证规则详解
Oct 23 PHP
PHP实现Markdown文章上传到七牛图床的实例内容
Feb 11 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
虫族 ZERG 概述
2020/03/14 星际争霸
php使用Jpgraph绘制3D饼状图的方法
2015/06/10 PHP
YII2框架中excel表格导出的方法详解
2017/07/21 PHP
PHP cookie与session会话基本用法实例分析
2019/11/18 PHP
javascript 原型模式实现OOP的再研究
2009/04/09 Javascript
jQuery+jqmodal弹出窗口实现代码分明
2010/06/14 Javascript
jQuery提交多个表单的小例子
2013/06/30 Javascript
使用requestAnimationFrame实现js动画性能好
2015/08/06 Javascript
总结Javascript中数组各种去重的方法
2016/10/04 Javascript
微信浏览器禁止页面下拉查看网址实例详解
2017/06/28 Javascript
angular2系列之路由转场动画的示例代码
2017/11/09 Javascript
vue基于element的区间选择组件
2018/09/07 Javascript
react项目实践之webpack-dev-serve
2018/09/14 Javascript
Vue项目引发的「过滤器」使用教程
2019/03/12 Javascript
基于Vue3.0开发轻量级手机端弹框组件V3Popup的场景分析
2020/12/30 Vue.js
[01:03:31]DOTA2上海特级锦标赛B组资格赛#1 Alliance VS Fnatic第二局
2016/02/26 DOTA
python多重继承新算法C3介绍
2014/09/28 Python
python通过BF算法实现关键词匹配的方法
2015/03/13 Python
Python与shell的3种交互方式介绍
2015/04/11 Python
python获取时间及时间格式转换问题实例代码详解
2018/12/06 Python
Python 3.x基于Xml数据的Http请求方法
2018/12/28 Python
在cmd中查看python的安装路径方法
2019/07/03 Python
自定义django admin model表单提交的例子
2019/08/23 Python
python GUI库图形界面开发之PyQt5时间控件QTimer详细使用方法与实例
2020/02/26 Python
Shell编程面试题
2012/05/30 面试题
计算机专业个人简短的自我评价
2013/10/23 职场文书
张家口市高新区党工委群众路线教育实践活动整改方案
2014/10/25 职场文书
2014年学校禁毒工作总结
2014/12/23 职场文书
试用期辞职信范文
2015/03/02 职场文书
仙境之桥观后感
2015/06/16 职场文书
世界名著读书笔记
2015/06/25 职场文书
农村结婚典礼主持词
2015/06/29 职场文书
2021年最新用于图像处理的Python库总结
2021/06/15 Python
最新动漫情报:2022年7月新番定档超过30部, OVERLORD骨王第四季也在其中噢
2022/05/04 日漫
Python sklearn分类决策树方法详解
2022/09/23 Python
使用CSS实现按钮边缘跑马灯动画
2023/05/07 HTML / CSS