让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下尝试使用GraphicsMagick的缩略图功能
Jan 01 PHP
PHP中break及continue两个流程控制指令区别分析
Apr 18 PHP
基于php split()函数的用法详解
Jun 05 PHP
PHP读取文件内容后清空文件示例代码
Mar 18 PHP
php+ajax实现无刷新动态加载数据技术
Apr 28 PHP
Zend Framework框架Smarty扩展实现方法
Mar 22 PHP
微信自定义分享php代码分析
Nov 24 PHP
yii 2.0中表单小部件的使用方法示例
May 23 PHP
用php+ajax新建流程(请假、进货、出货等)
Jun 11 PHP
PHP与以太坊交互详解
Aug 24 PHP
Laravel ORM 数据model操作教程
Oct 21 PHP
PHP 自动加载类原理与用法实例分析
Apr 14 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
JS 网站性能优化笔记
2011/05/24 PHP
php读取EXCEL文件 php excelreader读取excel文件
2012/12/06 PHP
php三元运算符知识汇总
2015/07/02 PHP
php使用Jpgraph创建3D饼形图效果示例
2017/02/15 PHP
php对微信支付回调处理的方法
2018/08/23 PHP
thinkphp5使html5实现动态跳转的例子
2019/10/16 PHP
强制设为首页代码
2006/06/19 Javascript
漂亮的提示信息(带箭头)
2007/03/21 Javascript
document.onreadystatechange事件的用法分析
2009/10/17 Javascript
javascript获取当前日期时间及其它操作函数
2011/01/11 Javascript
使用cluster 将自己的Node服务器扩展为多线程服务器
2014/11/10 Javascript
使用JavaScript和C#中获得referer
2014/11/14 Javascript
js实现图片无缝滚动
2015/12/23 Javascript
浅谈js中的延迟执行和定时执行
2016/05/31 Javascript
浅谈jquery之on()绑定事件和off()解除绑定事件
2016/10/26 Javascript
微信小程序 wxapp内容组件 icon详细介绍
2016/10/31 Javascript
使用UrlConnection实现后台模拟http请求的简单实例
2017/01/04 Javascript
JS复制对应id的内容到粘贴板(Ctrl+C效果)
2017/01/23 Javascript
基于JavaScript实现自定义滚动条
2017/01/25 Javascript
javascript算法之二叉搜索树的示例代码
2017/09/12 Javascript
jQuery实现的简单动态添加、删除表格功能示例
2017/09/21 jQuery
微信小程序自定义音乐进度条的实例代码
2018/08/28 Javascript
python 从远程服务器下载东西的代码
2013/02/10 Python
Python如何判断数独是否合法
2016/09/08 Python
Python 装饰器实现DRY(不重复代码)原则
2018/03/05 Python
Python 中pandas索引切片读取数据缺失数据处理问题
2019/10/09 Python
解决Python中报错TypeError: must be str, not bytes问题
2020/04/07 Python
CSS3 仿微信聊天小气泡实例代码
2017/04/05 HTML / CSS
Columbia Sportswear法国官网:全球户外品牌
2020/09/25 全球购物
如何反序的迭代一个序列?how do I iterate over a sequence in reverse order
2012/02/04 面试题
元旦晚会邀请函
2014/01/27 职场文书
入党自我鉴定
2014/03/25 职场文书
施工安全承诺书
2014/05/22 职场文书
辞职信范文大全
2015/03/02 职场文书
缅怀先烈主题班会
2015/08/14 职场文书
pytorch中的torch.nn.Conv2d()函数图文详解
2022/02/28 Python