您的位置:365bet手机在线 > Web前端 > PHP项目中CodeIgniter使用的一些建议

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

发布时间:2020-03-12 09:32编辑:Web前端浏览(180)

    本文由码农网 – 邱康原创,转载请看清文末的转发必要,款待出席大家的付费投稿安插!

    本文实例叙述了php框架CodeIgniter使用redis的点子。分享给大家供大家参照他事他说加以侦察,具体如下:

    近日再给三个应用程式写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 就可以爆发代码提醒,作用进步不少。

    先是Computer上必得已经装了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,这几个函数就足以出去了)。未来必要修改成编码后粤语,只怕转变来乌Crane语等等(奇怪的急需~)你都足以只改善一行代码,功效进步不菲。

    2、安装phpredis

    善用缓存

    假定三个应用软件的活跃客商不是广大,那么人生观的LAMP构作育能够应付了。不过随着客户的稳步扩张,要想加强并发量,最棒还是加三个缓存。在memcached和redis中,作者选择了redis,首要因为它数据类型更增进(不仅仅援助key-value型的多少,同一时间还提供list,set,zset,hash等数据构造的存款和储蓄),能帮你完结部分逻辑(防止重新造轮子)。与Eclipse配置同理,首先得让Computer上的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
    

    ① 下载

    登入逻辑的得以完毕

    对于大家的APP来讲,每种哀告都要一口咬住不放客户是或不是已登录,对于登入的法定客商平常呈现须求,对于未登陆的顾客提示“请首先登场入”。平时的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;
    

    本文由365bet手机在线发布于Web前端,转载请注明出处:PHP项目中CodeIgniter使用的一些建议

    关键词:

上一篇:10个你应该学习使用的PHP特性

下一篇:没有了