让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的无限分类实现想法~
Jan 02 PHP
简单采集了yahoo的一些数据
Feb 14 PHP
php 保留小数点
Apr 21 PHP
PHP 数组排序方法总结 推荐收藏
Jun 30 PHP
PHP基础教程(php入门基础教程)一些code代码
Jan 06 PHP
基于PHP字符串的比较函数strcmp()与strcasecmp()的使用详解
May 15 PHP
php缓冲输出实例分析
Jan 05 PHP
PHP 5.3和PHP 5.4出现FastCGI Error解决方法
Feb 12 PHP
PHP动态柱状图实现方法
Mar 30 PHP
Smarty分页实现方法完整实例
May 11 PHP
PHP编写登录验证码功能 附调用方法
May 19 PHP
ThinkPHP框架整合微信支付之刷卡模式图文详解
Apr 10 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/03/10 PHP
解析在PHP中使用mysqli扩展库对mysql的操作
2013/07/03 PHP
推荐一款MAC OS X 下php集成开发环境mamp
2014/11/08 PHP
利用JavaScript实现新闻滚动效果(实例代码)
2013/11/27 Javascript
jQuery截取指定长度字符串的实现原理及代码
2014/07/01 Javascript
关闭页面时window.location事件未执行的原因分析及解决方案
2014/09/01 Javascript
介绍JavaScript的一个微型模版
2015/06/24 Javascript
一个字符串中出现次数最多的字符 统计这个次数【实现代码】
2016/04/29 Javascript
浅析JS异步加载进度条
2016/05/05 Javascript
深入解析JavaScript中的立即执行函数
2016/05/21 Javascript
Vue.js路由组件vue-router使用方法详解
2016/12/02 Javascript
jQuery实现的分页功能示例
2017/01/22 Javascript
JQuery validate 验证一个单独的表单元素实例
2017/02/17 Javascript
Vue之Vue.set动态新增对象属性方法
2018/02/23 Javascript
Vue.js实现数据响应的方法
2018/08/13 Javascript
Vue cli3 库模式搭建组件库并发布到 npm的流程
2018/10/12 Javascript
koa2+vue实现登陆及登录状态判断
2019/08/15 Javascript
ES5 模拟 ES6 的 Symbol 实现私有成员功能示例
2020/05/06 Javascript
关于angular浏览器兼容性问题的解决方案
2020/07/26 Javascript
Vue中ref和$refs的介绍以及使用方法示例
2021/01/11 Vue.js
python基础教程之python消息摘要算法使用示例
2014/02/10 Python
python3新特性函数注释Function Annotations用法分析
2016/07/28 Python
python 创建一个空dataframe 然后添加行数据的实例
2018/06/07 Python
python3 kmp 字符串匹配的方法
2018/07/07 Python
快速解决Django关闭Debug模式无法加载media图片与static静态文件
2020/04/07 Python
海蓝之谜英国官网:La Mer英国
2020/01/15 全球购物
销售顾问的岗位职责
2013/11/13 职场文书
投标单位介绍信
2014/01/09 职场文书
酒店管理毕业生自我鉴定
2014/03/02 职场文书
乡镇干部先进性教育活动个人整改措施
2014/09/16 职场文书
小英雄雨来观后感
2015/06/09 职场文书
2016年教师节特级教师获奖感言
2015/12/09 职场文书
python实现Thrift服务端的方法
2021/04/20 Python
mybatis调用sqlserver存储过程返回结果集的方法
2021/05/08 SQL Server
20180830晚上第一届KSL半决赛 雨神vs解冻(二龙 三炮解说)
2022/04/01 星际争霸
python和Appium的移动端多设备自动化测试框架
2022/04/26 Python