图片 3

登录逻辑的贯彻

对此大家的应用程式来讲,每种须要都要认清顾客是不是已登录,对于登入的合法客户平常展现乞求,对于未登陆的客商提示“请首先登场入”。常常的web应用使用cookie-session机制,日常的session皆以以文件方式保留在服务器上,思忖到文件访谈慢于内部存款和储蓄器访谈,我们能够配备codeigniter的session保存于redis中。笔者那边模仿这种机制:客商符合规律login后赶回多个特定的id和特定的token(你可以自定义发生算法),服务器以id为key、token为value直接保存在redis中。现在的历次访谈应用程式都必须要带上用appsecret(预定义)加密后的参数id和token,服务器端校验成功即健康重回数据,不然提醒“请首先登场入”。

那么是还是不是每一个类都急需写一遍检查登入的代码呢?当然不能够如此干,我们可以自定义贰个基类,在该基类的布局函数中反省登录状态(还足以在这里地加载常用的帮助函数和库,比如下边的render_helper

rediscli)。然后其余的事情逻辑的类就连绵起伏该基类,并完成其自个儿逻辑就可以。

具体操作正是在 application/core
中新建文件 MY_Controller.php,该文件对应MY_Controller类(继承CI_Controller类)。该类只必要一个布局函数完毕上述功用就能够。

下一场其余逻辑类只需一而再两次三番MY_Controller类就不用再一次校验登陆状态,而只需成功自己逻辑。

4、配置redis.php

8. 不要全体的类都世襲 CI_Controller

自定义帮助函数和库

雷同一个种类中会有过多毫无二致的逻辑,会动用到同后生可畏的代码。如若每一遍都去复制粘贴不唯有困苦并且不便于后续校勘,想到必要改进一个逻辑将在到各种文件里改革代码就以为骇人听闻(涉及到设计方式这一块了,值得我们上学)。所以您要擅长利用那些自定义帮助函数(helpers)和自定义的库(libraries)。把相仿的逻辑封装成函数只怕类,每趟遭受相近的逻辑之时只需调用现有的helper大概library就可以,更改也只要求在helper大概library中朝气蓬勃处修改,无需处处找代码。

举八个自己项目中的例子。API供给给应用软件发送的乞请重回json格式数据,那么在PHP中的后生可畏种完成格局正是:

echo json_encode ( $data);//$data 是array类型的数据

不过如若$data中包括中文字符的话,输出的json数据会把中文产生Unicode编码,为了防止客商端必要再一次拍卖多少,须求参预三个参数,即:

echo json_encode ( $data , JSON_UNESCAPED_UNICODE);//$data 是array类型的数据

那样就能够出口原始的国语了。可是难题又来了,每回都要写这么长生机勃勃段代码实乃艰苦,所以封装成一个援助函数。在application/helpers
文件夹中新建二个文书render_helper.php。在那之中代码如下:

<?php

defined ( 'BASEPATH' ) or exit ( 'No direct script access allowed' );

/**

 * 打印不转义中文的json

 * @param [array] $data

 */

function echo_json($data) {

       echo json_encode ( $data, JSON_UNESCAPED_UNICODE );

}

那便是说每一次调用之时只需先在类中的结构函数载入该帮助函数,如下:

$this->load->helper ( 'render' ); // 载入打印json的自定义辅助函数

就足以在本类的有所成员函数中运用该办法:

echo_json ( $data);

那样省时省力(加上Eclipse的代码提醒,你只要求输入echo,这一个函数就可以出来了)。将来须求更正成编码后汉语,可能调换到韩语等等(古怪的供给~)你都得以只修正少年老成行代码,功用拉长不菲。

那是保存值,第4个参数是时间,那一个时刻不可能差十分的少。通过查看函数能够看到,那么些参数默许值是60秒,而非永恒,所以这一个参数是不可能差不离的。

下一步,也是当真关键的一步了,这一步初叶载入了二个Controller类,这一个是个实例,实际不是援用;然后经过Router来解析http地址,拿到调整器和方法的名字,接着看application\controllers里是或不是留存这么的控制器和方式,若无,则报错;借使有,则起头决断。

总结

Codeigniter是自个儿最心爱的三个PHP框架(相比于thinkPHP,Zend
Framework等等),首要在于其易安装,轻量,易自定制的长处。把握好那几个亮点,我们就能够写出不逊于那多少个重量级框架写出来的使用,何况省时省力。

用作一个学员,在搜寻学习的途中还会有为数不菲难题亟待缓和,本文的目的在于和大家享用,更要紧的是富贵人家有啥提议依旧议论请一定不吝指教哈,小编的微博:邱康singasong。

系列地址:

今后,继续载入Input,Language,注意在此之前载入的类库都以二个引用;然后又叁个最主要的载入,那就是CI_Base对象的载入,首先会咬定php的本子,要是是php4版本的,则会首先载入Loader,然后载入Base4,因为Base4中CI_Base继承于CI_Loader,而Base5中,CI_Base与CI_Loader未有持续关系。

开垦工具

开辟工具有成千上万,每一种人的习贯也比不上。Eclipse一贯是自家的最爱,那么怎么让Eclipse帮助codeigniter呢?

先是那是个PHP项目,所以得让Eclipse帮助PHP。假如你的微处理机已经设置了PHP,那么最简便易行的做法正是在Eclipse的market space中搜索PDT并设置。具体操作:Help -> Eclipse
马克etplace。在输入框中输入PDT,点击find,如图:

图片 1

点击右下方的install,等待几分钟就能够。

近来得以在Eclipse中写PHP了,但是对于codeigniter来讲,平时使用的说话相同如下:

$this->load->model ( 'user_model' );

$this->input->post ('phone');

历次都要手动输入这么长的近乎的言辞对于追求快速的人的话鲜明是不可取的,所以得让Eclipse帮助codeigniter特定的代码提示,包含Controller和Model。把之类代码增添到

system/core/
目录下的Controller文件中CI_Controller类的布局函数从前,那实际就是举行

变量评释,Model文件也是同大器晚成操作。

 /**
       * @var CI_Config
       */

       var $config;

       /**
       * @var CI_DB_active_record
       */

       var $db;

       /**
       * @var CI_Email
       */

       var $email;

       /**
       * @var CI_Form_validation
       */

       var $form_validation;

       /**
       * @var CI_Input
       */

       var $input;

       /**
       * @var CI_Loader
       */

       var $load;

       /**
       * @var CI_Router
       */

       var $router;

       /**
       * @var CI_Session
       */

       var $session;

       /**
       * @var CI_Table
       */

       var $table;

       /**
       * @var CI_Unit_test
       */

       var $unit;

       /**
       * @var CI_URI
       */

       var $uri;

       /**
       * @var CI_Pagination
       */

       var $pagination;

现行反革命效应如下:

图片 2

只需输入$this 即可发生代码提示,效用增高不菲。

在myApplication/config下创办理文件件redis.php:

1.
D景逸SUVY。不要三番五次重复造轮子,把能重用的代码放在它应当在的地点,比方libraries,
helpers 也许是
models,并非controllers,二个经历准绳:当你复制代码的时候,只怕你早已第贰次把它坐落了不当的地点。

擅长缓存

倘诺一个应用程式的外向顾客不是超级多,那么守旧的LAMP布局就能够应付了。可是随着顾客的逐级增添,要想提升并发量,最棒依然加多个缓存。在memcached和redis中,笔者接受了redis,紧要归因于它数据类型更拉长(不独有辅助key-value型的多寡,同不时间还提供list,set,zset,hash等数据布局的蕴藏),能帮你实现部分逻辑(制止双重造轮子)。与Eclipse配置同理,首先得让Computer上的PHP能够和redis通信(若是你的微管理机已经设置了redis),那么首推的是phpredis扩大,这里介绍一下本人在Debain服务器上的布局进度,施行的一声令下如下:

wget https://github.com/nicolasff/phpredis/archive/master.tar.gz  #下载扩展

tar xvf master.tar.gz      #解压目录

cd phpredis-master/     #进入解压后的目录

phpize

./configure --enable-redis

make && make install    #安装

#但是报错-bash: phpize: command not found(在使用apt-get install php5安装php时,默

#认是没有安装phpize的,我们安装phpredis时,需要用到phpize,因此,需要先安装#phpize。我们通过安装php开发者工具来获取phpize。执行如下命令即可: apt-get install #php5-dev)

ls  /usr/lib/php5/20100525/#根据安装提示的文件,结果:curl.so  gd.so  redis.so

vim /etc/php5/apache2/php.ini   #打开PHP配置文件

# Dynamic Extensions 后面添加extension=redis.so,因为上面命令结果显示有redis.so

/etc/init.d/apache2 restart       #重启Apache服务器

今昔PHP就能够和redis通信了,测验如下:

<?php

 $redis = new Redis();

 $redis->connect('127.0.0.1',6379);

 $redis->auth('你的密码');//为了安全,要给redis设置密码

 $redis->set('tom','hanks');

 echo ' tom:'.$redis->get('tom'). '</br>';// tom:hanks

echo 'will:'.$redis->get('will'); //will:

?>

好了,未来过来配置codeigniter使其能够使用redis的步调了。Codeigniter3.0.0本人有着redis扶植,但是它实现的法力过于单生龙活虎,不能够满意自己的专门的职业必要,所以一定要改革。可是最棒不用一向在/system/libraries/Cache/drivers/Cache_redis.php
中期维改良,因为今后codeigniter升级采纳直接覆盖system文件夹的款式,会覆盖掉你的代码。所以最明智的做法依然友好创设一个库,具体步骤如下:

1、在application/config/redis.php 中参与配置新闻:

<?php

defined ( 'BASEPATH' ) or exit ( 'No direct script access allowed' );

$config ['socket_type'] = 'tcp';

config ['host'] = '你的服务器域名或者IP';

$config ['password'] = '你的redis密码';

$config ['port'] = 6379;

$config ['timeout'] = 0;

2、在application/libraries中国建工总公司立如下图的文件构造

图片 3

Rediscli.php 代码如下:

<?php

defined ( 'BASEPATH' ) or exit ( 'No direct script access allowed' );

class Rediscli extends CI_Driver_Library {

       public $valid_drivers;

       public $CI;

       function __construct() {

              $this->CI = & get_instance ();

              $this->valid_drivers = array (

                            'default'

              );

       }

}

Rediscli_default.php
代码从/system/libraries/Cache/drivers/Cache_redis.php
直接拷贝过来,唯风流浪漫的不等是把类名从CI_Cache_redis改为Rediscli_default,这样就能够根据法定的利用方式应用我们同心协力写的库。

3、以后得以在Rediscli_default.php中增进恐怕涂改章程,具体操作决意于你自身的利用的供给。举个例子在自己的接受中,要求保险三个不可否认长度的类别,所以在Rediscli_default类中增添如下三个点子:

/**

       * 弹出链表头元素

       * @param unknown $key,链表名              

       */

       public function lpop($key) {

              return $this->_redis->lPop ( $key );

       }

       /**

       * 插入元素到表尾

       * @param unknown $key,链表名              

       * @param unknown $value,待插入值              

       */

       public function rpush($key, $value) {

              return $this->_redis->rPush ( $key, $value );

       }

某些类需求调用该库时只需在其布局函数中增加如下代码:

$this->load->driver ( 'rediscli' ); // 加载redis自定义库

$this->rediscli->default->is_supported ();//判断是否支持redis并打开连接

则该类的每种函数就都得以动用Rediscli_default类中的任一方法,示比方下:

$this->rediscli->default->lpop('delnews');//弹出名为delnews的链表头元素

$this->rediscli->default->rpush('delnews',$nid);//该链表加入尾元素$nid

在myApplication/libraries/Rediscli/下创造三个Rediscli.php

9. CodeIgniter的文书构造

本文由码农网 –
邱康原创,转发请看清文末的转发须求,款待参加大家的付费投稿安插!

① Rediscli_default.php

6. 代码施行

近年再给一个应用软件写API,同时还要写相应的后台处理网址。为了有助于开拓和代码协会与治本,小编决定接纳一个共处的框架。Codeigniter由于其轻量轻易自定制的特征吸引了自身,一路开销过来也许有大约年岁月了,写下一些谈得来在开垦进程中的一些心得来与大家共勉。

④ 时间

10. CodeIgniter的劳作进度

因为还没报错,所以不经常只怕不精通那几个数量到底存在何地。

一条推行准绳是把越来越少的事物放进 Controller ,记住 D兰德酷路泽Y
法则:不要再一次造轮子。当在赶过二个地点编写雷同的代码时,应该依靠它的等级次序来尝试编写一个library, helper,或 model。比方数据库连接类,用得很频仍,就把它做成
model。

5、使用CI框架的redis库

最风靡的或是是 DataMapper OverZealous Edition ,还能够使用 Doctrine
,另二个筛选 RapidDataMapper 是我本身的创作。

若果驾驭了 MVC 的精髓,那将会化为生龙活虎种习贯,你会从 MVC
简洁的代码中有十分大的收获。

// 框架的redis库$this->load->driver;$this->cache->redis->save;//这里注意,第三个参数是时间,在自定义redis库会说明echo $this->cache->redis->get;

风流洒脱种简易的不二等秘书诀是在 application/config/database.php 文件设置 db_debug
的值为叁个常量 MP_DB_DEBUG,当网址在运营中,如下设置:

正文实例陈说了php框架CodeIgniter使用redis的措施。分享给我们供大家参谋,具体如下:

  1. Caching
    。缓存是四个升高质量的很好的点子,特别是裁减数据库的拜见。能够参见网页缓存和数据库缓存,恐怕在论坛上搜寻别的的可选方案,譬喻MP_Cache 是作者本人的小说。

  2. HTTP headers
    。在客户端你可以看到通过单独发送HTTP底部使浏览器缓存页面来增进质量,当您利用
    AJAX 的时候你也急需掌握它来禁绝浏览器缓存。

其风度翩翩自定义redis库和框架的库是同等的,在这里处集聚说Bellamy下。

一个长日子保持缓存的例子:

7、注意这种情况

复制代码
代码如下:ini_set(‘display_errors’, ‘Off’);error_reporting;define;

② Rediscli.php

过滤不良数据.验证数据以确定保证适合科学的体系, 长度, 大小等.
在交付数据到你的数据库早前将其转变.关于SQL注入,XSS,以致 CSLacrosseF
,你应有先精晓它们,再决定是或不是使用方法来防护它们。能够参照CI手册上的平安指南
以至输入和安全类。只怕最关键的规范是在把数量提交到数据库或文件系统从前检查有着客户的输入。

重启服务器可能重启计算机,index.php的门路下增加三个查看页面:phpinfo.php,在个中加多:

日前筹划接任改正二个旁人用Codeigniter写的品类,纵然事情未发生前也是有用过CI,不过是完全按着自身的情致写的,没按CI的一些套路。用在民众的项目,最佳照旧按框架典型来,所以仍旧计算一下,免得以往人家再接手的时候韩门献丑。

这种照旧少用吧,毕竟用redis是为着速度越来越快。

codeigniter.php风流罗曼蒂克上来就引进了八个文本:Common.php,Compat.php和config/constants.php,此中Common里包蕴了一些函数,用于载入类库的load_class,记录日志的log_message,和引进错误页面包车型客车show_404是多少个注重的函数;Compat首要化解了php4和php5中的函数不宽容难题,而constants则定义了某些读写文件权限的常量。

admin

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注