让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中ADODB类详解
Mar 25 PHP
精美漂亮的php分页类代码
Apr 02 PHP
PHP连接MySQL查询结果中文显示乱码解决方法
Oct 25 PHP
腾讯微博提示missing parameter errorcode 102 错误的解决方法
Dec 22 PHP
PHP积分兑换接口实例
Feb 09 PHP
Zend Framework动作助手Url用法详解
Mar 05 PHP
php 判断字符串编码是utf-8 或gb2312实例
Nov 01 PHP
php 三大特点:封装,继承,多态
Feb 19 PHP
PHP实现的MD5结合RSA签名算法实例
Oct 07 PHP
PHP htmlspecialchars() 函数实例代码及用法大全
Sep 18 PHP
Laravel框架控制器的request与response用法示例
Sep 30 PHP
tp5框架基于Ajax实现列表无刷新排序功能示例
Feb 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导出到Excel或CSV的详解(附utf8、gbk 编码转换)
2013/06/25 PHP
PHP批量生成静态HTML的简单原理和方法
2014/04/20 PHP
php输出金字塔的2种实现方法
2014/12/16 PHP
Yii配置与使用memcached缓存的方法
2016/07/13 PHP
php多进程应用场景实例详解
2019/07/22 PHP
CSS3画一个阴阳八卦图
2021/03/09 HTML / CSS
中文字符串截取的js函数代码
2013/04/17 Javascript
用JavaScript实现动画效果的方法
2013/07/20 Javascript
JS操作JSON要领详细总结
2013/08/25 Javascript
JQuery插入DOM节点的方法
2015/06/11 Javascript
jQuery position() 函数详解以及jQuery中position函数的应用
2015/12/14 Javascript
JavaScript中的prototype原型学习指南
2016/05/09 Javascript
Zabbix添加Node.js监控的方法
2016/10/20 Javascript
jQuery表单元素选择器代码实例
2017/02/06 Javascript
详解ES6之用let声明变量以及let loop机制
2017/07/15 Javascript
node.js基于express使用websocket的方法
2017/11/09 Javascript
区别JavaScript函数声明与变量声明
2018/09/12 Javascript
微信公众平台 发送模板消息(Java接口开发)
2019/04/17 Javascript
electron实现静默打印的示例代码
2019/08/12 Javascript
vue实现员工信息录入功能
2020/06/11 Javascript
浅析VUE防抖与节流
2020/11/24 Vue.js
[00:37]2016完美“圣”典风云人物:AMS宣传片
2016/12/06 DOTA
python字典多条件排序方法实例
2014/06/30 Python
Python的Flask框架中配置多个子域名的方法讲解
2016/06/07 Python
python微信公众号之关键词自动回复
2018/06/15 Python
Python实现繁?转为简体的方法示例
2018/12/18 Python
详解Python装饰器
2019/03/25 Python
OpenCV搞定腾讯滑块验证码的实现代码
2019/05/18 Python
使用虚拟环境打包python为exe 文件的方法
2019/08/29 Python
给你一面国旗 教你用python画中国国旗
2019/09/24 Python
在echarts中图例legend和坐标系grid实现左右布局实例
2020/05/16 Python
如何基于Python代码实现高精度免费OCR工具
2020/06/18 Python
详解java调用python的几种用法(看这篇就够了)
2020/12/10 Python
一款html5 canvas实现的图片玻璃碎片特效
2014/09/11 HTML / CSS
安全教育演讲稿
2014/05/09 职场文书
导游词之扬州大明寺
2019/10/09 职场文书