phalcon-入門篇4(log日誌和session緩存)

#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的其他的功能你們能夠自行嘗試

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

相關文章
相關標籤/搜索