让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 相关文章推荐
PHP4实际应用经验篇(4)
Oct 09 PHP
PHP伪静态页面函数附使用方法
Jun 20 PHP
php 进度条实现代码
Mar 10 PHP
解析PHP中的内存管理,PHP动态分配和释放内存
Jun 28 PHP
php实现memcache缓存示例讲解
Dec 04 PHP
Java和PHP在Web开发方面对比分析
Mar 01 PHP
优化WordPress的Google字体以加速国内服务器上的运行
Nov 24 PHP
WordPress中转义HTML与过滤链接的相关PHP函数使用解析
Dec 22 PHP
详解WordPress中提醒安装插件以及隐藏插件的功能实现
Dec 25 PHP
PHP格式化MYSQL返回float类型的方法
Mar 30 PHP
php通过文件头判断格式的方法
May 28 PHP
laravel框架实现为 Blade 模板引擎添加新文件扩展名操作示例
Jan 25 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 采集程序中常用的函数
2009/12/09 PHP
PHP输出当前进程所有变量/常量/模块/函数/类的示例
2013/11/07 PHP
PHP计算当前坐标3公里内4个角落的最大最小经纬度实例
2016/02/26 PHP
基于jquery的一个简单的脚本验证插件
2010/04/05 Javascript
js获取上传文件大小示例代码
2014/04/10 Javascript
基于jquery实现的可编辑下拉框实现代码
2014/08/02 Javascript
Jquery判断form表单数据是否变化
2016/03/30 Javascript
js重写方法的简单实现
2016/07/10 Javascript
jQuery实现简洁的轮播图效果实例
2016/09/07 Javascript
Vue.js学习之过滤器详解
2017/01/22 Javascript
js封装成插件_Canvas统计图插件编写实例
2017/09/12 Javascript
Openlayers实现图形绘制
2020/09/28 Javascript
手动实现把python项目发布为exe可执行程序过程分享
2014/10/23 Python
Pyhthon中使用compileall模块编译源文件为pyc文件
2015/04/28 Python
如何在Python函数执行前后增加额外的行为
2016/10/20 Python
python简单线程和协程学习心得(分享)
2017/06/14 Python
Python实现多并发访问网站功能示例
2017/06/19 Python
python使用pyqt写带界面工具的示例代码
2017/10/23 Python
用Python下载一个网页保存为本地的HTML文件实例
2018/05/21 Python
Python实现字典(dict)的迭代操作示例
2018/06/05 Python
Python 动态导入对象,importlib.import_module()的使用方法
2019/08/28 Python
python 画3维轨迹图并进行比较的实例
2019/12/06 Python
Python中格式化字符串的四种实现
2020/05/26 Python
python中upper是做什么用的
2020/07/20 Python
Python性能测试工具Locust安装及使用
2020/12/01 Python
Pandas中两个dataframe的交集和差集的示例代码
2020/12/13 Python
CSS3+DIV实现漂亮的动画彩色标签
2016/06/16 HTML / CSS
HTML5验证以及日期显示的实现详解
2013/07/05 HTML / CSS
美国玛丽莎收藏奢华时尚商店:Marissa Collections
2016/11/21 全球购物
Tarte Cosmetics官网:美国最受欢迎的化妆品公司之一
2017/08/24 全球购物
澳大利亚在线奢侈品时尚零售平台:Azura Runway
2021/01/13 全球购物
清明节扫墓活动方案
2014/03/02 职场文书
写得不错的求职信范文
2014/07/11 职场文书
学校领导班子群众路线整改措施
2014/09/16 职场文书
普通党员个人对照检查材料
2014/09/18 职场文书
教师辞职信范文
2015/02/28 职场文书