#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 歡迎你們的加入!