让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 session常见问题集锦及解决办法总结
Mar 18 PHP
php 301转向实现代码
Sep 18 PHP
PHP学习之字符串比较和查找
Apr 17 PHP
7个超级实用的PHP代码片段
Jul 11 PHP
php入门学习知识点八 PHP中for循环基本应用之九九乘法口绝表
Jul 14 PHP
php实现的漂亮分页方法
Apr 17 PHP
PHP图片处理之使用imagecopyresampled函数实现图片缩放例子
Nov 19 PHP
php上传图片并压缩的实现方法
Dec 22 PHP
CodeIgniter表单验证方法实例详解
Mar 03 PHP
PHP面相对象中的重载与重写
Feb 13 PHP
php-fpm开启状态统计的方法详解
Jun 23 PHP
利用php + Laravel如何实现部署自动化详解
Oct 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
php生成缩略图填充白边(等比缩略图方案)
2013/12/25 PHP
php实现阿拉伯数字和罗马数字相互转换的方法
2015/04/17 PHP
laravel实现按时间日期进行分组统计方法示例
2019/03/23 PHP
Jquery练习之表单验证实现代码
2010/12/14 Javascript
JavaScript中如何通过arguments对象实现对象的重载
2014/05/12 Javascript
input标签内容改变的触发事件介绍
2014/06/18 Javascript
JavaScript中匿名函数用法实例
2015/03/23 Javascript
clipboard.js无需Flash无需依赖任何JS库实现文本复制与剪切
2015/10/10 Javascript
理解javascript中的严格模式
2016/02/01 Javascript
javascript实现右侧弹出“分享到”窗口效果
2016/02/01 Javascript
jQuery File Upload文件上传插件使用详解
2016/12/06 Javascript
node下使用UglifyJS压缩合并JS文件的方法
2018/03/07 Javascript
JS函数节流和防抖之间的区分和实现详解
2019/01/11 Javascript
解决vue.js提交数组时出现数组下标的问题
2019/11/05 Javascript
vue之debounce属性被移除及处理详解
2019/11/13 Javascript
javascript中的offsetWidth、clientWidth、innerWidth及相关属性方法
2020/05/14 Javascript
解决Vue-cli无法编译es6的问题
2020/10/30 Javascript
JS闭包原理及其使用场景解析
2020/12/03 Javascript
Python FTP操作类代码分享
2014/05/13 Python
Python的time模块中的常用方法整理
2015/06/18 Python
利用Python写一个爬妹子的爬虫
2018/06/08 Python
Python中函数参数匹配模型详解
2019/06/09 Python
pygame编写音乐播放器的实现代码示例
2019/11/19 Python
pytorch中获取模型input/output shape实例
2019/12/30 Python
python实现上传文件到linux指定目录的方法
2020/01/03 Python
Python实现不规则图形填充的思路
2020/02/02 Python
解决pyecharts运行后产生的html文件用浏览器打开空白
2020/03/11 Python
Python 实现自动完成A4标签排版打印功能
2020/04/09 Python
Python数据模型与Python对象模型的相关总结
2021/01/26 Python
matplotlib之pyplot模块坐标轴标签设置使用(xlabel()、ylabel())
2021/02/22 Python
纯HTML+CSS3制作导航菜单(附源码)
2013/04/24 HTML / CSS
德国富尔达运动鞋店:43einhalb
2020/12/25 全球购物
小学假期安全广播稿
2014/09/28 职场文书
2015年世界无烟日活动方案
2015/05/04 职场文书
如何用 Python 子进程关闭 Excel 自动化中的弹窗
2021/05/07 Python
浅谈MySQL next-key lock 加锁范围
2021/06/07 MySQL