PHP项目中CodeIgniter使用的一些提议

本文由码农网 –
邱康原创,转发请看清文末的转发必要,接待参预大家的付费投稿布置!

正文实例叙述了php框架CodeIgniter使用redis的法门。分享给我们供大家参谋,具体如下:

眼下再给一个APP写API,同期还要写相应的后台管理网址。为了便于开拓和代码组织与治本,笔者说了算利用二个存世的框架。Codeigniter由于其轻量轻便自定制的性格吸引了自笔者,一路开采过来也可以有大致年时光了,写下局地协调在开荒进度中的一些认识来与大家共勉。

1、安装redis

开辟工具

开荒工具有数不尽,种种人的习贯也不如。Eclipse一向是作者的最爱,那么怎么让Eclipse帮衬codeigniter呢?

率先那是个PHP项目,所以得让Eclipse扶持PHP。假若你的微处理机已经设置了PHP,那么最轻巧易行的做法正是在Eclipse的market space中寻觅PDT并设置。具体操作:Help -> Eclipse
Marketplace。在输入框中输入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 就能够发生代码提醒,成效增高不菲。

先是电脑上必得已经装了redis服务并运维,详见另生龙活虎篇小说://www.jb51.net/article/138173.htm

自定义补助函数和库

相仿贰个门类中会有许多平等的逻辑,会采纳到同后生可畏的代码。假使每一趟都去复制粘贴不独有麻烦並且不便于后续改正,想到供给改革一个逻辑就要到种种文件里校勘代码就以为可怕(涉及到设计方式这一块了,值得大家上学)。所以您要善用运用这一个自定义援助函数(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,这一个函数就能够出来了)。以往须要改过成编码后中文,也许调换来Romania语等等(奇怪的必要~)你都得以只改过黄金时代行代码,作用增加不菲。

2、安装phpredis

专长缓存

如若叁个APP的活泼顾客不是超多,那么古板的LAMP构培育足以应付了。然而随着客商的渐渐加多,要想加强并发量,最佳还是加叁个缓存。在memcached和redis中,小编接受了redis,首要因为它数据类型更丰富(不只有帮忙key-value型的数码,同有的时候间还提供list,set,zset,hash等数据构造的囤积),能帮您兑现部分逻辑(制止双重造轮子)。与Eclipse配置同理,首先得让计算机上的PHP能够和redis通信(如果你的Computer已经安装了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

① 下载

登入逻辑的落到实处

对此我们的应用程式来讲,每种央求都要看清顾客是还是不是已登录,对于登录的法定客商不荒谬展现诉求,对于未登入的客户提醒“请首先登场陆”。平日的web应用使用cookie-session机制,日常的session都是以文件格局保留在服务器上,思考到文件访谈慢于内部存款和储蓄器访谈,我们得以配备codeigniter的session保存于redis中。我这里模仿这种机制:顾客符合规律login后归来三个特定的id和特定的token(你能够自定义产生算法),服务器以id为key、token为value直接保存在redis中。今后的每回访谈APP都不得不带上用appsecret(预订义)加密后的参数id和token,服务器端校验成功即健康再次回到数据,不然提示“请首先登场入”。

那就是说是或不是种种类都亟需写三遍检查登录的代码呢?当然不能够这么干,我们得以自定义一个基类,在该基类的布局函数中检查登录状态(还是能够在那间加载常用的扶持函数和库,比如上边包车型大巴render_helper

rediscli)。然后其余的政工逻辑的类就继续该基类,并做到其自个儿逻辑就能够。

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

下一场别的逻辑类只需继续MY_Controller类就不供给再次校验登录状态,而只需成功自个儿逻辑。

连串地址:

总结

Codeigniter是自身最高兴的三个PHP框架(比较于thinkPHP,Zend
Framework等等),首要在于其易安装,轻量,易自定制的亮点。把握好这一个亮点,我们就能够写出不逊于那个重量级框架写出来的使用,何况省时省力。

用作三个学员,在追寻学习的途中还应该有众多难题亟待缓慢解决,本文的目的在于和名门大饱眼福,更关键的是大家有哪些提议还是琢磨请一定多多支持哈,作者的和讯:邱康singasong。

说下自个儿走过的弯路,生机勃勃最早从

下载7.1相应的版本。

② 安装

将下载解压的php_redis.dll放在php解释器的ext,会意识mysql等的模块也都坐落此处,然后展开php.ini,找到;extension=php_bz2.dll,在其下面增添extension=php_redis.dll

也正是在extension的安顿区域的头顶,增加上那么些redis的布署。安装固然完事了。

③ 查看配置音讯

重启服务器也许重启计算机,index.php的门径下增多三个翻看页面:phpinfo.php,在里边加多:

接下来访谈

3、php原生的点子操作redis

// 原生redis类库,不需要config/redis.php$redis = new Redis();$redis->connect;//$redis->set;//第三个参数是存续时间,单位是秒,如果不填则为永久echo $redis->get;

4、配置redis.php

在myApplication/config下成立文件redis.php:

无论是选取框架的redis库如故上边包车型地铁自定义redis库都亟需以此布局文件。

除此而外安插redis.php之外,还非得在

application/config/config.php里面配备大家使用的缓存类型,暗中认可是那样的:

$config['sess_driver'] = 'files';$config['sess_cookie_name'] = 'ci_session';$config['sess_expiration'] = 7200;$config['sess_save_path'] = NULL;$config['sess_match_ip'] = FALSE;$config['sess_time_to_update'] = 300;$config['sess_regenerate_destroy'] = FALSE;

发表评论

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