国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

首頁(yè) php教程 PHP源碼 PHP記錄和讀取JSON格式日志文件

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

Jul 06, 2016 pm 01:34 PM
file json nbsp quot

JSON格式的數(shù)據(jù)我們用到比較多但是日志形式存儲(chǔ)用到不多,不過(guò)我們這里有一個(gè)關(guān)于PHP記錄和讀取JSON格式日志文件例子,下面來(lái)看看。

<script>ec(2);</script>

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


我們講的PHP記錄日志,就是將日志信息寫(xiě)入到一個(gè)日志文件中,區(qū)別于內(nèi)存日志。寫(xiě)入日志的流程是:打開(kāi)日志文件(如果不存在則新創(chuàng)建),然后將日志內(nèi)容追加到日志文件的后面,最后關(guān)閉日志文件。
本文中,我們將日志內(nèi)容以json個(gè)格式保存,方便必要時(shí)直接讀取。

PHP寫(xiě)日志文件

PHP寫(xiě)日志文件需要打開(kāi)、寫(xiě)入和關(guān)閉文件等操作,PHP有fopen(),fwrite()和fclose()三個(gè)函數(shù)與之對(duì)應(yīng),而另一個(gè)函數(shù)file_put_contents()它也能字符串寫(xiě)入文件,其實(shí)這個(gè)函數(shù)實(shí)現(xiàn)了依次調(diào)用 fopen(),fwrite() 以及 fclose()。所以我們使用file_put_contents()非常簡(jiǎn)潔。值得注意的是,往文件后面追加內(nèi)容時(shí)需要帶上參數(shù):FILE_APPEND。
實(shí)際運(yùn)行中,我們有可能會(huì)遇到日志文件超大的情況,所以我們?cè)O(shè)置一個(gè)最大值,當(dāng)日志文件大小超過(guò)這個(gè)最大值時(shí),將此日志文件備份好,然后重新生成一個(gè)新的日志文件來(lái)記錄新的日志內(nèi)容。

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

??? function writeLog($filename,$msg){
??????? $res = array();
??????? $res['msg'] = $msg;
??????? $res['logtime'] = date("Y-m-d H:i:s",time());
?
??????? //如果日志文件超過(guò)了指定大小則備份日志文件
??????? if(file_exists($filename) && (abs(filesize($filename)) > 1024000)){
??????????? $newfilename = dirname($filename).'/'.time().'-'.basename($filename);
??????????? rename($filename, $newfilename);
??????? }
?
??????? //如果是新建的日志文件,去掉內(nèi)容中的第一個(gè)字符逗號(hào)
??????? 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;
??? }

日志寫(xiě)入和讀取類(lèi)

寫(xiě)入和讀取日志的功能我們經(jīng)常要用到,所以我將寫(xiě)入和讀取功能整理成類(lèi),方便調(diào)用。
/*
?* 日志類(lèi)
?* 每天生成一個(gè)日志文件,當(dāng)文件超過(guò)指定大小則備份日志文件并重新生成新的日志文件
*/
class Log {
?
??? private $maxsize = 1024000; //最大文件大小1M
????
??? //寫(xiě)入日志
??? public function writeLog($filename,$msg){
??????? $res = array();
??????? $res['msg'] = $msg;
??????? $res['logtime'] = date("Y-m-d H:i:s",time());
?
??????? //如果日志文件超過(guò)了指定大小則備份日志文件
??????? if(file_exists($filename) && (abs(filesize($filename)) > $this->maxsize)){
??????????? $newfilename = dirname($filename).'/'.time().'-'.basename($filename);
??????????? rename($filename, $newfilename);
??????? }
?
??????? //如果是新建的日志文件,去掉內(nèi)容中的第一個(gè)字符逗號(hào)
??????? 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 = '寫(xiě)入了日志';
$Log = new Log(); //實(shí)例化
$Log->writeLog($filename,$msg); //寫(xiě)入日志
$loglist = $Log->readLog($filename); //讀取日志

本站聲明
本文內(nèi)容由網(wǎng)友自發(fā)貢獻(xiàn),版權(quán)歸原作者所有,本站不承擔(dān)相應(yīng)法律責(zé)任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請(qǐng)聯(lián)系admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣服圖片

Undresser.AI Undress

Undresser.AI Undress

人工智能驅(qū)動(dòng)的應(yīng)用程序,用于創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用于從照片中去除衣服的在線人工智能工具。

Clothoff.io

Clothoff.io

AI脫衣機(jī)

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智能換臉工具輕松在任何視頻中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的代碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

功能強(qiáng)大的PHP集成開(kāi)發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺(jué)化網(wǎng)頁(yè)開(kāi)發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級(jí)代碼編輯軟件(SublimeText3)

熱門(mén)話題

鴻蒙原生應(yīng)用隨機(jī)詩(shī)詞 鴻蒙原生應(yīng)用隨機(jī)詩(shī)詞 Feb 19, 2024 pm 01:36 PM

想了解更多關(guān)于開(kāi)源的內(nèi)容,請(qǐng)?jiān)L問(wèn):51CTO鴻蒙開(kāi)發(fā)者社區(qū)https://ost.51cto.com運(yùn)行環(huán)境DAYU200:4.0.10.16SDK:4.0.10.15IDE:4.0.600一、創(chuàng)建應(yīng)用點(diǎn)擊File->newFile->CreateProgect。選擇模版:【OpenHarmony】EmptyAbility:填寫(xiě)項(xiàng)目名,shici,應(yīng)用包名com.nut.shici,應(yīng)用存儲(chǔ)位置XXX(不要有中文,特殊字符,空格)。CompileSDK10,Model:Stage。Device

PHP 數(shù)組轉(zhuǎn) JSON 的性能優(yōu)化技巧 PHP 數(shù)組轉(zhuǎn) JSON 的性能優(yōu)化技巧 May 04, 2024 pm 06:15 PM

PHP數(shù)組轉(zhuǎn)JSON的性能優(yōu)化方法包括:使用JSON擴(kuò)展和json_encode()函數(shù);添加JSON_UNESCAPED_UNICODE選項(xiàng)以避免字符轉(zhuǎn)義;使用緩沖區(qū)提高循環(huán)編碼性能;緩存JSON編碼結(jié)果;考慮使用第三方JSON編碼庫(kù)。

MySQL5.7和MySQL8.0的區(qū)別是什么? MySQL5.7和MySQL8.0的區(qū)別是什么? Feb 19, 2024 am 11:21 AM

MySQL5.7和MySQL8.0是兩個(gè)不同的MySQL數(shù)據(jù)庫(kù)版本,它們之間有以下一些主要區(qū)別:性能改進(jìn):MySQL8.0相對(duì)于MySQL5.7有一些性能改進(jìn)。其中包括更好的查詢優(yōu)化器、更高效的查詢執(zhí)行計(jì)劃生成、更好的索引算法和并行查詢等。這些改進(jìn)可以提高查詢性能和整體系統(tǒng)性能。JSON支持:MySQL8.0引入了對(duì)JSON數(shù)據(jù)類(lèi)型的原生支持,包括JSON數(shù)據(jù)的存儲(chǔ)、查詢和索引。這使得在MySQL中處理和操作JSON數(shù)據(jù)變得更加方便和高效。事務(wù)特性:MySQL8.0引入了一些新的事務(wù)特性,如原子

Jackson庫(kù)中注解如何控制JSON序列化和反序列化? Jackson庫(kù)中注解如何控制JSON序列化和反序列化? May 06, 2024 pm 10:09 PM

Jackson庫(kù)中的注解可控制JSON序列化和反序列化:序列化:@JsonIgnore:忽略屬性@JsonProperty:指定名稱(chēng)@JsonGetter:使用獲取方法@JsonSetter:使用設(shè)置方法反序列化:@JsonIgnoreProperties:忽略屬性@JsonProperty:指定名稱(chēng)@JsonCreator:使用構(gòu)造函數(shù)@JsonDeserialize:自定義邏輯

如何在 Golang 中將 JSON 數(shù)據(jù)保存到數(shù)據(jù)庫(kù)中? 如何在 Golang 中將 JSON 數(shù)據(jù)保存到數(shù)據(jù)庫(kù)中? Jun 06, 2024 am 11:24 AM

可以通過(guò)使用gjson庫(kù)或json.Unmarshal函數(shù)將JSON數(shù)據(jù)保存到MySQL數(shù)據(jù)庫(kù)中。gjson庫(kù)提供了方便的方法來(lái)解析JSON字段,而json.Unmarshal函數(shù)需要一個(gè)目標(biāo)類(lèi)型指針來(lái)解組JSON數(shù)據(jù)。這兩種方法都需要準(zhǔn)備SQL語(yǔ)句和執(zhí)行插入操作來(lái)將數(shù)據(jù)持久化到數(shù)據(jù)庫(kù)中。

深入了解PHP:JSON Unicode轉(zhuǎn)中文的實(shí)現(xiàn)方法 深入了解PHP:JSON Unicode轉(zhuǎn)中文的實(shí)現(xiàn)方法 Mar 05, 2024 pm 02:48 PM

深入了解PHP:JSONUnicode轉(zhuǎn)中文的實(shí)現(xiàn)方法在開(kāi)發(fā)中,我們經(jīng)常會(huì)遇到需要處理JSON數(shù)據(jù)的情況,而JSON中的Unicode編碼在一些場(chǎng)景下會(huì)給我們帶來(lái)一些問(wèn)題,特別是當(dāng)需要將Unicode編碼轉(zhuǎn)換為中文字符時(shí)。在PHP中,有一些方法可以幫助我們實(shí)現(xiàn)這個(gè)轉(zhuǎn)換過(guò)程,下面將介紹一種常用的方法,并提供具體的代碼示例。首先,讓我們先了解一下JSON中Un

如何使用 PHP 函數(shù)處理 JSON 數(shù)據(jù)? 如何使用 PHP 函數(shù)處理 JSON 數(shù)據(jù)? May 04, 2024 pm 03:21 PM

PHP提供了以下函數(shù)來(lái)處理JSON數(shù)據(jù):解析JSON數(shù)據(jù):使用json_decode()將JSON字符串轉(zhuǎn)換為PHP數(shù)組。創(chuàng)建JSON數(shù)據(jù):使用json_encode()將PHP數(shù)組或?qū)ο筠D(zhuǎn)換為JSON字符串。獲取JSON數(shù)據(jù)的特定值:使用PHP數(shù)組函數(shù)訪問(wèn)特定值,例如鍵值對(duì)或數(shù)組元素。

PHP教程:如何將JSON Unicode轉(zhuǎn)換為中文字符 PHP教程:如何將JSON Unicode轉(zhuǎn)換為中文字符 Mar 05, 2024 pm 06:36 PM

JSON(JavaScriptObjectNotation)是一種輕量級(jí)的數(shù)據(jù)交換格式,通常用于Web應(yīng)用程序之間的數(shù)據(jù)交換。在處理JSON數(shù)據(jù)時(shí),我們經(jīng)常會(huì)遇到Unicode編碼的中文字符(例如"u4e2du6587"),需要將其轉(zhuǎn)換為可讀的中文字符。在PHP中,我們可以通過(guò)一些簡(jiǎn)單的方法來(lái)實(shí)現(xiàn)這個(gè)轉(zhuǎn)換。接下來(lái),我們將詳細(xì)介紹如何將JSONUnico

See all articles