让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 静态变量的初始化
Nov 15 PHP
php中批量替换文件名的实现代码
Jul 20 PHP
获取php页面执行时间,数据库读写次数,函数调用次数等(THINKphp)
Jun 03 PHP
PHP面向对象教程之自定义类
Jun 10 PHP
PHP数据库万能引擎类adodb配置使用以及实例集锦
Jun 12 PHP
php+xml结合Ajax实现点赞功能完整实例
Jan 30 PHP
使用PHP处理数据库数据如何将数据返回客户端并显示当前状态
Feb 16 PHP
用php+ajax新建流程(请假、进货、出货等)
Jun 11 PHP
php实现支付宝当面付(扫码支付)功能
May 30 PHP
PHP mongodb操作类定义与用法示例【适合mongodb2.x和mongodb3.x】
Jun 16 PHP
PHP实现给定一列字符,生成指定长度的所有可能组合示例
Jun 22 PHP
laravel-admin表单提交隐藏一些数据,回调时获取数据的方法
Oct 08 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
Access数据库导入Mysql的方法之一
2006/10/09 PHP
木翼下载系统中说明的PHP安全配置方法
2007/06/16 PHP
Smarty中常用变量操作符汇总
2014/10/27 PHP
PHP微信开发之查询微信精选文章
2016/06/23 PHP
php提取微信账单的有效信息
2018/10/01 PHP
thinkphp3.2同时连接两个数据库的简单方法
2019/08/13 PHP
让人印象深刻的10个jQuery手风琴效果应用
2012/05/08 Javascript
基于JQuery模仿苹果桌面的Dock效果(初级版)
2012/10/15 Javascript
javascript通过navigator.userAgent识别各种浏览器
2013/10/25 Javascript
JS按字节截取字符长度实例
2013/11/20 Javascript
jQuery插件animateSlide制作多点滑动幻灯片
2015/06/11 Javascript
JS禁用页面上所有控件的实现方法(附demo源码下载)
2015/12/17 Javascript
第二章之Bootstrap 页面排版样式
2016/04/25 Javascript
jQuery插件formValidator实现表单验证
2016/05/23 Javascript
jQuery中layer分页器的使用
2017/03/13 Javascript
字太多用...代替的方法(两种)
2017/03/15 Javascript
JS利用cookies设置每隔24小时弹出框
2017/04/20 Javascript
js 开发之autocomplete=&quot;off&quot;在chrom中失效的解决办法
2017/09/28 Javascript
Vue引入jquery实现平滑滚动到指定位置
2018/05/09 jQuery
微信小程序实现禁止分享代码实例
2019/10/19 Javascript
[01:33]完美世界DOTA2联赛PWL S3 集锦第二期
2020/12/21 DOTA
python中Flask框架简单入门实例
2015/03/21 Python
十行代码使用Python写一个USB病毒
2019/06/21 Python
python实现大量图片重命名
2020/03/23 Python
python编写微信公众号首图思路详解
2019/12/13 Python
Django 实现将图片转为Base64,然后使用json传输
2020/03/27 Python
Html5与App的通讯方式详解
2019/10/24 HTML / CSS
一组SQL面试题
2016/02/15 面试题
工商管理专业学生的自我评价
2013/10/01 职场文书
体育教育个人自荐信范文
2013/12/01 职场文书
数学系毕业生求职信
2014/05/29 职场文书
企业晚会策划方案
2014/05/29 职场文书
校运动会广播稿(100篇)
2014/09/12 职场文书
2016年党员公开承诺书范文
2016/03/24 职场文书
十大好看的穿越动漫排名:《瑞克和莫蒂》第一,国漫《有药》在榜
2022/03/18 日漫
win10电脑右下角输入法图标不见了?Win10右下角不显示输入法的解决方法
2022/07/23 数码科技