#phalcon-入门篇4(log日志和session缓存)#php
本教程基于phalcon2.0.9版本git
##前言## 先在这里感谢各位phalcon技术爱好者,咱们提供这样一个优秀的交流平台windows
在新年来临之际!在这里祝关注和喜欢phalcon和phalapi的童鞋们,有大家的支持我才有动力鼓起勇气为你们带来这一系列教程,那么今天的教程将是在猴年前的最后一篇了,咱们今天的目的是了解phalcon的log机制以及session的使用,那么让咱们在新年的喜悦中来一同窗习今天的内容吧!api
注:笔者水平有限,说的不正确的地方但愿你们多多指正,一同交流技术缓存
附上:session
喵了个咪的博客:http://w-blog.cn框架
教程代码库:http://git.oschina.net/wenzhenxi/Phalcon-tutorialide
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的其他的功能你们能够自行尝试
使用多个处理程序进行日志记录(意思是日志写两份或多份)
<?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");
行格式化处理(这个是能够定义)
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]
系统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 ) );
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 欢迎你们的加入!