目录
- 文件上传
- 缩略图
- 载入分页类
- 验证码
- 加密密钥
- session类
- 登录验证
- 拓展自定义公共类
- 载入公共视图
- 路由设置
- 隐藏单入口index.php方法
- 伪静态
- 缓存
- 开启生产模式 (index.php单入口文件中)
一、文件上传
- 配置
$config['upload_path'] = './upload/'; //文件上传的位置(这个是自建的)
$config['allowed_types'] = 'gif|jpg|png|jepg'; //允许上的文件 MIME 类型
$config['max_size'] ='10000'; //允许上传文件大小的最大值(单位 KB)
$config['file_name'] = time().mt_rand(1,100); //上传后文件名
- 载入上传类
$this->load->library('upload',$config);
- 执行上传
$this->upload->do_upload('thumb');
$wrong = $this->upload->display_errors(); //选择了图片 如果有出错(如格式错误)将错误信息打印
if($wrong){
error($wrong);
}
$message = $this->upload->data(); //返回信息
二、缩略图
- 配置
$con['source_image'] = $message['full_path']; //设置原始图像的名称和路径
$con['create_thumb'] = FALSE; //告诉图像处理函数生成缩略图。
$con['maintain_ratio'] = TRUE; //保持图像纵横比例
$con['width'] = 200;
$con['height'] = 200;
- 载入缩略图
$this->load->library('image_lib',$con);
- 执行动作
$result = $this->image_lib->resize();
if(!$result){
echo '缩略图加载失败';
}
三、载入分页类
$this->load->library('pagination'); //载入分页库
$perPage = 3; //每页显示的条数
- 配置项
$config['base_url'] = site_url('adminArticle/index'); //配置分页信息 配置在此页面
$config['total_rows'] = $this->db->count_all_results('article'); //获取表中所有记录条数
$config['per_page'] = $perPage; //每页显示条数
$config['uri_segment'] = 3; //页码参数位置 偏移的位置(起点)
- 自定义分类连接(默认英文显示)
$config['prev_link'] = '上一页';
$config['next_link'] = '下一页';
$config['first_link'] = '首页';
$config['last_link'] = '末页';
$this->pagination->initialize($config); // 初始化分类页
$data['links'] = $this->pagination->create_links(); // 生成链接,生成分页信息
$offset = $this->uri->segment(3); // 取得偏移的位置
$this->db->limit( $perPage,$offset); // 设置每页显示多少条,偏移的位置(起点)
$data['article'] = $this->art->queryArt(); //查出文章数据
$this->load->view('queryArt',$data); //将数据载入视图显示
四、验证码
- 载入验证码辅助函数
$this->load->helper('captcha');
$speed ='djfgnjfknbmnbrertdzcdkk4365676milpoi'; //随机产生四个字符作为验证码
$word = '';
for($i = 0; $i<4; $i++){
$word = $speed[mt_rand(0,strlen($speed)-1 )].$word;
}
- 配置项
$vals = array(
'word' => $word, //种子
'img_path' => './captcha/', //图片的文件路径
'img_url' => base_url().'/captcha/', // 生成图片的url地址
'img_width' => 80,
'img_height' => 25,
'expiration' => 60 // 图片过期时间,单位秒,默认2小时
);
- 创建验证码
$cap =create_captcha($vals);
if(!isset($_SESSION)){
session_start();
}
$_SESSION['code'] = $cap['word']; //将验证码保存起来
$data['captcha'] = $cap['image']; //将图片保存到数组中
$this->load->view('login.php',$data); //加载视图时将data分配出去
五、加密密钥
在application/config/config.php
中设置,越长越安全
$config['encryption_key'] = 'njfnrkjncdsdckdmknvjnjvmvmd4557684235439';
//加密密钥,用于控制加密过程的一小段信息,使用它可以对普通文本进行加密和解密
六、session类
- 载入session类
$this->load->library('session');
或自动载入
在application/config/autoload.php
中设置$autoload['libraries'] = array('session');
- 存入session
$this->session->set_userdata($sessionData);
- 取出session
$this->session->userdata('username');
- 销毁session
$this->session->sess_destroy();
七、登录验证
public function login_in(){
$code = $this->input->post('captcha'); //将用户输入的验证码保存起来
$username = $this->input->post('username');
$password = $this->input->post('password');
if(!isset($_SESSION)){
session_start();
}
if(strtolower($code) != $_SESSION['code']){ //将用户输入的验证码保存起来并转化为小写,进行对比
error('验证码错误');
}
$this->load->model('admin_model', 'admin');
$userData = $this->admin->check($username); //保存查询用户的对应信息,返回的是一个二维数组
if(!$userData || $userData[0]['password'] != md5($password)){ //如果用户名不存在或者密码错误
error('用户名或者密码错误');
}
$sessionData = array(
'username' => $username,
'uid' => $userData[0]['uid'],
'logintime' => time()
);
$this->session->set_userdata($sessionData); //存入session
//$this->session->userdata('username'); //取出session
success('adminHome/index', '登陆成功');
}
八、拓展自定义公共类
在application/core
目录下新建MY_Controller.php
文件
加入以下代码 检测用户是否登录
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class MY_Controller extends CI_Controller{ // 自定义公共类 防跳墙
public function __construct(){
parent::__construct();
$username = $this->session->userdata('username');
$uid = $this->session->userdata('uid');
if(!$username || !$uid){ //没有登录 跳转回登录页面
echo '<script>alert("请先登录");</script>'; //??? 为什么没有提示
redirect('adminLogin/index');
}
}
}
其它后台使用了session的控制器 都要继承这个MY_Controller
即将 extends CI_Controller
改为extends MY_Controller
九、载入公共视图
<?php $this->load->view('head'); ?>
<?php $this->load->view('body'); ?>
<?php $this->load->view('foot'); ?>
十、路由设置
目的:为了使url更加简洁,隐藏控制器,提高安全性
位置:application/config/routes.php
两种配置方式
注意:设置路由后 ,URL片段需要改变
eg. $aid = $this->uri->segment(2);
十一、隐藏单入口index.php方法
- 开启apache 配置文件
httpd.conf
中的LoadModule rewrite_module modules/mod_rewrite.so
(即将此句前面的#号去掉) - 将此文件中对应目录下的的
AllowOverride
改为All
image.png - 在根目录即
index.php
目录下,建立文件命名为.htaccess
,写入以下代码
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]
- 将
CI/config/config.php
中的$config['index_page'] = '';
设置为空 - 重启apache
十二、伪静态 ,展示出来的是以html一类的静态页面形式
将application/config/config.php文件中的后缀设置为.html
$config['url_suffix'] = '.html';
十三、缓存
开启缓存,单位分钟,缓存页面到application/cache
文件夹中,可以添加到页面任何位置
$this->output->cache(5/60); // 5秒
十四、开启生产模式 (index.php单入口文件中)
development 调试模式(默认)
production 生产环境,错误输出不显示
当产品上线后,调整为生产模式
image.png