专栏首页喵了个咪的博客空间phalcon-入门篇4(log日志和session缓存)

phalcon-入门篇4(log日志和session缓存)

#phalcon-入门篇4(log日志和session缓存)#

本教程基于phalcon2.0.9版本

##前言## 先在这里感谢各位phalcon技术爱好者,我们提供这样一个优秀的交流平台

在新年来临之际!在这里祝关注和喜欢phalcon和phalapi的童鞋们,有你们的支持我才有动力鼓起勇气为大家带来这一系列教程,那么今天的教程将是在猴年前的最后一篇了,我们今天的目的是了解phalcon的log机制以及session的使用,那么让我们在新年的喜悦中来一同学习今天的内容吧!

注:笔者水平有限,说的不正确的地方希望大家多多指正,一同交流技术

附上:

喵了个咪的博客:http://w-blog.cn

教程代码库:http://git.oschina.net/wenzhenxi/Phalcon-tutorial

phalcon官网地址:https://phalconphp.com

phalcon中文社区:http://www.iphalcon.cn/

##1. log日志##

说道日志大家并不陌生,log一般用来记录PHP的debug或者是一些重要的报错信息来方便我们进行分析排除隐患,那phalcon的日志处理能给我们带来怎样的惊喜呢,我们继续往下看,

###1.1 基本log###

log目录我建议使用如下目录结构(比较方便定位你需要查找的那个月那天的记录):

我们照旧通过命名空间引入我们需要实例化的log类

use Phalcon\Logger\Adapter\File as FileAdapter;

我们在加入如下语句看下情况:

$logger = new FileAdapter("../Runtime/log/2016-2/20160203.log");  //初始化文件地址
$logger->log("This is a message");								  //写入普通log
$logger->log("This is an error", \Phalcon\Logger::ERROR);         //写入error信息
$logger->error("This is another error");                          //于上一句同义

我们可能会遇到这样的报错:(是应为文件夹不存在可以检查文件夹是否创建)

failed to open stream: No such file or directory in

或许是这样的报错:(没有权限导致的(当然对windows来说不会有这种情况)Liunx赋予一下www权限就能解决了)

failed to open stream: Permission denied in

当我们解决了报错正常访问了通过之后我们可以看到在20160203.log文件中有如下一段话:

这里我们就已经成功的写入了log,到这里有人会问我那我到了2016年3月份了那文件又不存在了怎么办,其实我们一般会这样做,生成存放路径,然后验证路径文件夹是否存在,如果不存在就创建文件夹,这样就可以很好的避免这个问题,或者可以不去区分2016-2这个月份全部放在log中,因为.log的文件是自己生成的所以不用担心最后没的文件.

###1.2 log事务###

其实开始看log事务我也很莫名,在想log要事务干嘛,但是会过来结合phalcon的特点想了想就明白了,phalcon是高性能框架追求的是更快的速度,而如果每个地方执行log都要去写入到文件里面的话那么文件IO就会非常频繁,明显phalcon的开发者考虑到了这个问题.

官方的例子如下

// 开启事务
$logger->begin();

// 添加消息
$logger->alert("This is an alert");
$logger->error("This is another error");

//  保存消息到文件中
$logger->commit();

为了测试我们试着开始事务但是不结束看看会不会记录到log文件之中.测试结果当然是没有写入log任何内容,有需要使用log的童鞋这个确实不为是一个节省资源的方法

###1.3 更多灵活的配置###

到这里不得不说phalcon连一个log日志能做的这样的细致,难怪phalcon会在国外能火起来,下面会简单提及一下log的其余的功能大家可以自行尝试

  1. 使用多个处理程序进行日志记录(意思是日志写两份或多份) <?php use Phalcon\Logger; use Phalcon\Logger\Multiple as MultipleStream; use Phalcon\Logger\Adapter\File as FileAdapter; use Phalcon\Logger\Adapter\Stream as StreamAdapter; $logger = new MultipleStream(); $logger->push(new FileAdapter('test.log')); $logger->push(new StreamAdapter('php://stdout')); $logger->log("This is a message"); $logger->log("This is an error", Logger::ERROR); $logger->error("This is another error");
  2. 行格式化处理(这个是可以定义) use Phalcon\Logger\Formatter\Line as LineFormatter; // 修改日志格式 $formatter = new LineFormatter("[%date%] - [%message%]"); $logger->setFormatter($formatter); //这样配置获得log结果如下 //[Wed, 03 Feb 16 11:20:13 +0800] - [This is another error]
  3. 系统log use Phalcon\Logger\Adapter\Syslog as SyslogAdapter; // 基本用法 $logger = new SyslogAdapter(null); // Setting ident/mode/facility 参数设置 $logger = new SyslogAdapter( "ident-name", array( 'option' => LOG_NDELAY, 'facility' => LOG_MAIL ) );
  4. FirePHP 日志记录器(FirePHP 是利用Firebug console栏输出调试信息方便程序) use Phalcon\Logger; use Phalcon\Logger\Adapter\Firephp as Firephp; $logger = new Firephp(""); $logger->log("This is a message"); $logger->log("This is an error", Logger::ERROR); $logger->error("This is another error");

##2. session缓存##

这样一个场景,用户登录了跳转到了首页,首页要显示用户的名称,这个地方你会怎么做,对第一时间我们就会想到用session,session是一个非常方便在各个控制器中传递数据的临时缓存,在phalcon也提供了session模块让我我们来体验一下把!

###2.1 配置session###

就和其他的配置一样session也需要在index.php中初始化代码如下

use Phalcon\Session\Adapter\Files as Session;

//实例化session并且开始 赋值给DI实例 方便在控制器中调用
$di->setShared('session', function () {
    $session = new Session();
    $session->start();
    return $session;
});

###2.2 使用session###

我们简单的修改一下控制器就能做简单的测试:

在IndexCpmtroller.php的indexAction方法中加入:

$this->session->set('username', 'miao');

在IndexCpmtroller.php的testAction方法中加入:

echo $this->session->get('username');

我们先访问http://phalcon.w-blog.cn/phalcon/Index/test发现并没有什么变化

在访问http://phalcon.w-blog.cn/phalcon/在紧接着访问http://phalcon.w-blog.cn/phalcon/Index/test发现已经打印出了miao

还可以清除session值

$this->session->remove("username");

当用户退出或者是整个使用结束我们还能关闭整个session:

$this->session->destroy();

phalcon还提供了不同应用隔离,会话袋,组件的持久数据等操作这里就不再提及,以上的session操作基本已经够用了,感兴趣的童鞋可以阅读官网文档

##3. 小结##

今天的教程到这里也就结束了,在这里希望大家能够在阅读每篇教程只能能够去尝试尝试,我局的只有亲身写过的代码才不会忘记,最后给大家摆个早年,祝大家猴年吉祥,新的一年工作顺利,技术都能上一个新台阶!

注:笔者能力有限有说的不对的地方希望大家能够指出,也希望多多交流!

Phalcon技术交流:364520707 PhalCon中文社区:287484785 欢迎大家的加入!

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • phalcon-入门篇1(基本介绍与环境搭建)

    #phalcon-入门篇1(基本介绍与环境搭建)# ? 本教程基于phalcon2.0.9版本 ##前言## ***先在这里感谢各位phalcon技术爱好者,我...

    喵了个咪233
  • zephir-(2)安装和初体验

    zephir-安装和初体验 ? 前言 先在这里感谢各位zephir开源技术提供者 zephir主要是解决了PHP开发人员尝试编写和编译PHP拓展所能执行的代码的...

    喵了个咪233
  • phalcon-入门篇6(控制器)

    #phalcon-入门篇6(控制器)# ? 本教程基于phalcon2.0.9版本 ##前言## 先在这里感谢各位phalcon技术爱好者,我们提供这样一个优秀...

    喵了个咪233
  • Play Scala 2.5.x - Play JSON开发指南

    joymufeng
  • WCF 入门(20)

    今天第20集了。这个视频系列里面有6集和异常相关,这集是最后一集。前面几集讲了服务端遇到普通的 .net exception时候,要转换城Soap Fault,...

    _淡定_
  • 公众平台开发者中心接口权限列表改版 细分接口类别方便查阅见监控

      腾讯公司董事会主席兼CEO马化腾在世界互联网大会上表示基于连接基于开放的原则,“在微信创新性的引入公众账号和服务号的体系,连接了很多服务和商家”,与腾讯开放...

    ytkah
  • 一名python学习者打开双11的正确姿势

    11月11日是个有趣的日子。客观来说,它和一年中其他364(365)天一样没什么特殊,但偏偏又总被人赋予特殊的含义。十年之前,大家谈论的是如何打发“光棍节”(跟...

    Crossin先生
  • C/C++内存管理-学习笔记

    内存在程序编译的时候就已经分配好了,在程序运行期间这块内存都存在,如全局变量,static变量等。

    黑光技术
  • 如何定位Obj-C野指针随机Crash(三):如何让Crash自报家门

    本文主要介绍如何利用OC Runtime的特性,让OC野指针对象主动抛出自己的信息,秒杀某些全系统栈Crash。 ? 陈其锋,腾讯SNG即通产品部音视频技术中心...

    腾讯Bugly
  • php设计模式

    什么是设计模式 设计模式,是一种解决问题的思维,而并非某种特定的方法。是前人给我们总结的宝贵经验。学习设计模式是为了编写可复用、可拓展、高性能软件。学习设计模式...

    joshua317

扫码关注云+社区

领取腾讯云代金券