PHP實(shí)現(xiàn)類似于C語(yǔ)言的文件讀取及解析功能
本文實(shí)例講述了PHP實(shí)現(xiàn)類似于C語(yǔ)言的文件讀取及解析功能。分享給大家供大家參考,具體如下:
$log_file_name = 'D:/static/develop/kuai_zhi/acagrid.com/public/Logs/'.date('Ym').'/'.date('d').'_error.log'; //$log_file_name = 'D:/static/develop/kuai_zhi/acagrid.com/public/Logs/201701/19_error.log'; if(!file_exists($log_file_name)) return; $handle = fopen($log_file_name,'rb'); if (FALSE === $handle) { exit("Failed to open stream to URL"); } // $stream = fread($handle, $length);//從文件當(dāng)前指針位置,往后讀取n個(gè)字節(jié)長(zhǎng)度 //重置文件指針的位置。指定指針的位置,指針位置修改后。讀取文件,后面是從這個(gè)位置開始讀取了 //fseek($handle,105); //fgets表示每次讀取文件的一行 $error_log_array = []; while( ($line = fgets($handle) ) !==false){ //每次讀取一行 //匹配出現(xiàn)[1],tp日志中用這種表示致命錯(cuò)誤類型 if(preg_match("/\[1\]/", $line)){ $error_log_array[] = $line; } } fclose($handle);
需要注意的幾個(gè)點(diǎn):
1、如果是使用fwrite,注意避免將原來(lái)文件的內(nèi)容清空掉了。關(guān)鍵是fopen的打開方式。r或者w。
如果使用追加方式則是a標(biāo)記。
2、fopen的時(shí)候,注意判斷是否成功打開文件。避免使用feof的時(shí)候進(jìn)入死循環(huán)。因?yàn)檫@個(gè)函數(shù),當(dāng)傳入進(jìn)去不是指針,則這個(gè)函數(shù)永遠(yuǎn)會(huì)返回false
feof的本意是:判斷是否為文件結(jié)尾。如果是結(jié)尾,則返回true。不是結(jié)尾返回false。如果恰好傳入非法的指針,那么永遠(yuǎn)不是文件結(jié)尾了,一直返回false。
feof()函數(shù),當(dāng)傳入進(jìn)去的不是指針類型的時(shí)候,使用如下判斷會(huì)出現(xiàn)死循環(huán)
while(!feof($fp)){ }
3、fread和fgets。讀取文件一行一行讀取,則使用fgets。不是按照行讀取,則使用fread()讀取。
要注意這一點(diǎn)細(xì)節(jié):如果沒有更多的內(nèi)容,則返回false,也就是兩種情況,如果里面的內(nèi)容為空。也會(huì)返回false。當(dāng)讀取到文件的結(jié)尾的時(shí)候,這兩個(gè)函數(shù)也是返回false(難怪我們使用feof()使得我們不會(huì)發(fā)現(xiàn)這個(gè)細(xì)節(jié),因?yàn)檫@個(gè)函數(shù)已經(jīng)幫助我們判斷文件結(jié)尾了)
4、使用追加方式(即a標(biāo)記)打開文件,要注意,這種方式下,無(wú)法讀取文件內(nèi)容的,只能往里面寫入文件。所以針對(duì)這個(gè)句柄進(jìn)行fread()是會(huì)得到false的
總結(jié)是,如果只是僅僅讀取文件的內(nèi)容,就只用讀的方式打開,如果是寫入新內(nèi)容進(jìn)去,則用a的方式打開
現(xiàn)在明白,為什么要分多種模式進(jìn)行區(qū)分了。以前覺得沒有用?,F(xiàn)在看來(lái),打開的文件方式?jīng)Q定了,你能夠針對(duì)文件做什么(添加新內(nèi)容還是讀取內(nèi)容。)
更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《php文件操作總結(jié)》、《PHP數(shù)組(Array)操作技巧大全》、《PHP基本語(yǔ)法入門教程》、《php面向?qū)ο蟪绦蛟O(shè)計(jì)入門教程》、《PHP網(wǎng)絡(luò)編程技巧總結(jié)》及《php字符串(string)用法總結(jié)》
希望本文所述對(duì)大家PHP程序設(shè)計(jì)有所幫助。
- php讀取二進(jìn)制流(C語(yǔ)言結(jié)構(gòu)體struct數(shù)據(jù)文件)的深入解析
- php簡(jiǎn)單讀取.vcf格式文件的方法示例
- php 寫入緩存文件、讀取緩存文件的函數(shù)代碼
- PHP讀取CSV大文件導(dǎo)入數(shù)據(jù)庫(kù)的實(shí)例
- PHP讀取Excel類文件
- PHP讀取XML格式文件的方法總結(jié)
- php刪除txt文件指定行及按行讀取txt文檔數(shù)據(jù)的方法
- PHP讀取zip文件的方法示例
- php遍歷、讀取文件夾中圖片并分頁(yè)顯示圖片的方法
- PHP讀取、解析eml文件及生成網(wǎng)頁(yè)的方法示例
相關(guān)文章
php帶密碼功能并下載遠(yuǎn)程文件保存本地指定目錄 修改加強(qiáng)版
php帶密碼功能并將遠(yuǎn)程文件下載到本地指定目錄修改版,需要的朋友可以參考下。2010-05-05PHP基于curl后臺(tái)遠(yuǎn)程登錄正方教務(wù)系統(tǒng)的方法
這篇文章主要介紹了PHP基于curl后臺(tái)遠(yuǎn)程登錄正方教務(wù)系統(tǒng)的方法,結(jié)合實(shí)例形式分析了php使用curl及cookie實(shí)現(xiàn)遠(yuǎn)程登陸的操作技巧,需要的朋友可以參考下2016-10-10原生JS實(shí)現(xiàn)Ajax通過(guò)POST方式與PHP進(jìn)行交互的方法示例
這篇文章主要介紹了原生JS實(shí)現(xiàn)Ajax通過(guò)POST方式與PHP進(jìn)行交互的方法,涉及ajax使用post方式與后臺(tái)交互及php數(shù)據(jù)接收、處理、查詢數(shù)據(jù)庫(kù)等相關(guān)操作技巧,需要的朋友可以參考下2018-05-05php生成動(dòng)態(tài)驗(yàn)證碼gif圖片
這篇文章主要介紹了php生成動(dòng)態(tài)驗(yàn)證碼gif圖片的相關(guān)資料,需要的朋友可以參考下2015-10-10PHP面向?qū)ο蠖鄳B(tài)性實(shí)現(xiàn)方法簡(jiǎn)單示例
這篇文章主要介紹了PHP面向?qū)ο蠖鄳B(tài)性實(shí)現(xiàn)方法,簡(jiǎn)單說(shuō)明了面向?qū)ο蠖鄳B(tài)性的原理并結(jié)合具體實(shí)例給出了php實(shí)現(xiàn)多態(tài)性的相關(guān)操作技巧,需要的朋友可以參考下2017-09-09淺談PHP的exec()函數(shù)無(wú)返回值排查方法(必看)
下面小編就為大家?guī)?lái)一篇淺談PHP的exec()函數(shù)無(wú)返回值排查方法(必看)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-03-03解析關(guān)于wamp啟動(dòng)是80端口被占用的問(wèn)題
本篇文章是對(duì)關(guān)于wamp啟動(dòng)是80端口被占用的問(wèn)題(win7系統(tǒng)下WAMP 80端口被Microsoft-HTTPAPI/2.0占用的解決辦法)進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06php 用sock技術(shù)發(fā)送郵件的函數(shù)
php 用sock技術(shù)發(fā)送郵件的函數(shù)...2007-07-07