欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

PHP記錄和讀取JSON格式日志文件

 更新時(shí)間:2016年07月07日 09:45:35   作者:月光光  
這篇文章主要介紹了PHP記錄和讀取JSON格式日志文件的相關(guān)資料,需要的朋友可以參考下

我們有時(shí)需要記錄用戶或者后端的某個(gè)操作事件的運(yùn)行情況,可以使用后端語言如PHP將操作結(jié)果記錄到日志文件中,方便測試和查找問題。尤其是這些在后端運(yùn)行的而前端不能直接看到運(yùn)行結(jié)果的,那么就可以用日志文件記錄下來,如果你經(jīng)常跟一些接口開發(fā)如支付寶接口、微信卡券接口打交道的話,日志記錄就必不可少了。 

我們講的PHP記錄日志,就是將日志信息寫入到一個(gè)日志文件中,區(qū)別于內(nèi)存日志。寫入日志的流程是:打開日志文件(如果不存在則新創(chuàng)建),然后將日志內(nèi)容追加到日志文件的后面,最后關(guān)閉日志文件。

本文中,我們將日志內(nèi)容以json個(gè)格式保存,方便必要時(shí)直接讀取。

PHP寫日志文件
PHP寫日志文件需要打開、寫入和關(guān)閉文件等操作,PHP有fopen(),fwrite()和fclose()三個(gè)函數(shù)與之對應(yīng),而另一個(gè)函數(shù)file_put_contents()它也能字符串寫入文件,其實(shí)這個(gè)函數(shù)實(shí)現(xiàn)了依次調(diào)用 fopen(),fwrite() 以及 fclose()。所以我們使用file_put_contents()非常簡潔。值得注意的是,往文件后面追加內(nèi)容時(shí)需要帶上參數(shù):FILE_APPEND。

實(shí)際運(yùn)行中,我們有可能會(huì)遇到日志文件超大的情況,所以我們設(shè)置一個(gè)最大值,當(dāng)日志文件大小超過這個(gè)最大值時(shí),將此日志文件備份好,然后重新生成一個(gè)新的日志文件來記錄新的日志內(nèi)容。

在寫日志前,我們將日志內(nèi)容進(jìn)行json格式化,所以需要將內(nèi)容轉(zhuǎn)化成JSON格式,然后寫入文件。當(dāng)然你也可以不用json,或者換作別的工具程序(如日志分析工具)可以閱讀的格式。總之,我們寫入的內(nèi)容是方便必要時(shí)可以方便讀取。

 function writeLog($filename,$msg){ 
 $res = array(); 
 $res['msg'] = $msg; 
 $res['logtime'] = date("Y-m-d H:i:s",time()); 
 
 //如果日志文件超過了指定大小則備份日志文件 
 if(file_exists($filename) && (abs(filesize($filename)) > 1024000)){ 
  $newfilename = dirname($filename).'/'.time().'-'.basename($filename); 
  rename($filename, $newfilename); 
 } 
 
 //如果是新建的日志文件,去掉內(nèi)容中的第一個(gè)字符逗號 
 if(file_exists($filename) && abs(filesize($filename))>0){ 
  $content = ",".json_encode($res); 
 }else{ 
  $content = json_encode($res); 
 } 
 
 //往日志文件內(nèi)容后面追加日志內(nèi)容 
 file_put_contents($filename, $content, FILE_APPEND); 
 } 

PHP讀日志文件
必要時(shí),我們會(huì)讀取日志內(nèi)容進(jìn)行分析,同樣我們使用PHP的file_get_contents()函數(shù),直接將內(nèi)容讀取,并且轉(zhuǎn)換成json格式,方便調(diào)用。

 function readLog($filename){ 
 if(file_exists($filename)){ 
  $content = file_get_contents($filename); 
  $json = json_decode('['.$content.']',true); 
 }else{ 
  $json = '{"msg":"The file does not exist."}'; 
 } 
 return $json; 
 } 

日志寫入和讀取類
寫入和讀取日志的功能我們經(jīng)常要用到,所以我將寫入和讀取功能整理成類,方便調(diào)用。

<?php 
/* 
 * 日志類 
 * 每天生成一個(gè)日志文件,當(dāng)文件超過指定大小則備份日志文件并重新生成新的日志文件 
*/ 
class Log { 
 
 private $maxsize = 1024000; //最大文件大小1M 
 
 //寫入日志 
 public function writeLog($filename,$msg){ 
 $res = array(); 
 $res['msg'] = $msg; 
 $res['logtime'] = date("Y-m-d H:i:s",time()); 
 
 //如果日志文件超過了指定大小則備份日志文件 
 if(file_exists($filename) && (abs(filesize($filename)) > $this->maxsize)){ 
  $newfilename = dirname($filename).'/'.time().'-'.basename($filename); 
  rename($filename, $newfilename); 
 } 
 
 //如果是新建的日志文件,去掉內(nèi)容中的第一個(gè)字符逗號 
 if(file_exists($filename) && abs(filesize($filename))>0){ 
  $content = ",".json_encode($res); 
 }else{ 
  $content = json_encode($res); 
 } 
 
 //往日志文件內(nèi)容后面追加日志內(nèi)容 
 file_put_contents($filename, $content, FILE_APPEND); 
 } 
 
 
 //讀取日志 
 public function readLog($filename){ 
 if(file_exists($filename)){ 
  $content = file_get_contents($filename); 
  $json = json_decode('['.$content.']',true); 
 }else{ 
  $json = '{"msg":"The file does not exist."}'; 
 } 
 return $json; 
 } 
} 
 ?> 

使用方法:

$filename = "logs/log_".date("Ymd",time()).".txt"; 
$msg = '寫入了日志'; 
$Log = new Log(); //實(shí)例化 
$Log->writeLog($filename,$msg); //寫入日志 
$loglist = $Log->readLog($filename); //讀取日志 

源碼下載:http://xiazai.jb51.net/201607/yuanma/phplog(jb51.net).rar

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • PHP設(shè)計(jì)模式之 策略模式Strategy詳解【對象行為型】

    PHP設(shè)計(jì)模式之 策略模式Strategy詳解【對象行為型】

    這篇文章主要介紹了PHP設(shè)計(jì)模式之 策略模式Strategy,結(jié)合實(shí)例形式詳細(xì)分析了PHP基于對象行為型的策略模式Strategy具體原理、實(shí)現(xiàn)技巧與相關(guān)操作注意事項(xiàng),需要的朋友可以參考下
    2020-05-05
  • PHP面向?qū)ο蟪绦蛟O(shè)計(jì)中的self、static、parent關(guān)鍵字用法分析

    PHP面向?qū)ο蟪绦蛟O(shè)計(jì)中的self、static、parent關(guān)鍵字用法分析

    這篇文章主要介紹了PHP面向?qū)ο蟪绦蛟O(shè)計(jì)中的self、static、parent關(guān)鍵字用法,結(jié)合實(shí)例形式分析了self、static、parent關(guān)鍵字功能、應(yīng)用場景及相關(guān)使用技巧,需要的朋友可以參考下
    2019-08-08
  • 文件系統(tǒng)基本操作類

    文件系統(tǒng)基本操作類

    文件系統(tǒng)基本操作類...
    2006-11-11
  • PhpDocumentor 2安裝以及生成API文檔的方法

    PhpDocumentor 2安裝以及生成API文檔的方法

    phpDocumentor 2是一個(gè)可以分析php源代碼和注釋塊并生成文檔的程序。基于phpdocumentor 1和javadoc啟發(fā)而來,它持續(xù)創(chuàng)新的使用了一些新技術(shù)和支持php的新特性。
    2014-05-05
  • PHP goto語句簡介和使用實(shí)例

    PHP goto語句簡介和使用實(shí)例

    這篇文章主要介紹了什么是PHP goto語句和goto操作符的使用實(shí)例,需要的朋友可以參考下
    2014-03-03
  • php 攻擊方法之談php+mysql注射語句構(gòu)造

    php 攻擊方法之談php+mysql注射語句構(gòu)造

    由于PHP和MYSQL本身得原因,PHP+MYSQL的注射要比asp困難,尤其是注射時(shí)語句的構(gòu)造方面更是個(gè)難點(diǎn),本文主要是借對Okphp BBS v1.3一些文件得簡單分析,來談?wù)刾hp+mysql注射語句構(gòu)造方式,希望本文對你有點(diǎn)幫助。
    2009-10-10
  • php使用curl_init()和curl_multi_init()多線程的速度比較詳解

    php使用curl_init()和curl_multi_init()多線程的速度比較詳解

    這篇文章主要介紹了php使用curl_init()和curl_multi_init()多線程的速度比較,結(jié)合實(shí)例形式詳細(xì)分析了curl_init()和curl_multi_init()的具體使用方法及相關(guān)效率比較,需要的朋友可以參考下
    2018-08-08
  • 利用PHP自動(dòng)生成印有用戶信息的名片

    利用PHP自動(dòng)生成印有用戶信息的名片

    對于日常照片的處理場景,通常我們的選擇都是利用手機(jī)上的眾多P圖軟件。使用它們就可以輕松便捷的實(shí)現(xiàn)添加文字的功能。而作為碼農(nóng)的我們,當(dāng)某一天我們需要在編寫的網(wǎng)頁應(yīng)用里添加這一功能時(shí),我們該利用何種語言和工具來實(shí)現(xiàn)這一目標(biāo)呢? 下面跟小編一起來看看。
    2016-08-08
  • php比較相似字符串的方法

    php比較相似字符串的方法

    這篇文章主要介紹了php比較相似字符串的方法,通過php中similar_text函數(shù)來實(shí)現(xiàn)字符串的相似性比較功能,需要的朋友可以參考下
    2015-06-06
  • 編寫PHP腳本清除WordPress頭部冗余代碼的方法講解

    編寫PHP腳本清除WordPress頭部冗余代碼的方法講解

    這篇文章主要介紹了編寫PHP腳本清除WordPress頭部冗余代碼的方法講解,很多meta信息于用戶于SEO都無實(shí)際用處,放在那里還有礙觀瞻...需要的朋友可以參考下
    2016-03-03

最新評論