php fseek函數(shù)讀取大文件兩種方法
php讀取大文件,使用fseek函數(shù)是最為普遍的方式,它不需要將文件的內(nèi)容全部讀入內(nèi)存,而是直接通過指針來操作,所以效率是相當(dāng)高效的.在使用fseek來對文件進(jìn)行操作時(shí),也有多種不同的方法,效率可能也是略有差別的,下面是常用的兩種方法.
方法一:
首先通過fseek找到文件的最后一位EOF,然后找最后一行的起始位置,取這一行的數(shù)據(jù),再找次一行的起始位置,再取這一行的位置,依次類推,直到找到了$num行。實(shí)現(xiàn)代碼如下:
整個(gè)代碼執(zhí)行完成耗時(shí) 0.0095 (s)
function tail($fp,$n,$base=5) { assert($n>0); $pos = $n+1; $lines = array(); while(count($lines)< =$n){ try{ fseek($fp,-$pos,SEEK_END); } catch (Exception $e){ fseek(0); break; } $pos *= $base; while(!feof($fp)){ array_unshift($lines,fgets($fp)); } } return array_slice($lines,0,$n); } var_dump(tail(fopen("access.log","r+"),10));
方法二 :
還是采用fseek的方式從文件最后開始讀,但這時(shí)不是一位一位的讀,而是一塊一塊的讀,每讀一塊數(shù)據(jù)時(shí),就將讀取后的數(shù)據(jù)放在一個(gè)buf里,然后通過換行符(n)的個(gè)數(shù)來判斷是否已經(jīng)讀完最后$num行數(shù)據(jù).實(shí)現(xiàn)代碼如下
整個(gè)代碼執(zhí)行完成耗時(shí) 0.0009(s).
$fp = fopen($file, "r"); $line = 10; $pos = -2; $t = " "; $data = ""; while ($line > 0) { while ($t != "n") { fseek($fp, $pos, SEEK_END); $t = fgetc($fp); $pos --; } $t = " "; $data .= fgets($fp); $line --; } fclose ($fp); echo $data
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
- PHP使用fopen與file_get_contents讀取文件實(shí)例分享
- PHP file_get_contents函數(shù)讀取遠(yuǎn)程數(shù)據(jù)超時(shí)的解決方法
- php 使用file_get_contents讀取大文件的方法
- PHP讀取大文件的類SplFileObject使用介紹
- php讀取本地文件常用函數(shù)(fopen與file_get_contents)
- PHP移動(dòng)文件指針ftell()、fseek()、rewind()函數(shù)總結(jié)
- php file_put_contents()功能函數(shù)(集成了fopen、fwrite、fclose)
- PHP $_FILES函數(shù)詳解
- PHP file_get_contents 函數(shù)超時(shí)的幾種解決方法
- php使用file函數(shù)、fseek函數(shù)讀取大文件效率對比分析
相關(guān)文章
Laravel統(tǒng)一封裝接口返回狀態(tài)實(shí)例講解
這篇文章主要介紹了Laravel統(tǒng)一封裝接口返回狀態(tài)實(shí)例講解,封裝接口返回狀態(tài)有利于前后端分離項(xiàng)目的合作開發(fā),有正好需要的同學(xué)可以研究下2021-03-03Laravel框架實(shí)現(xiàn)定時(shí)發(fā)布任務(wù)的方法
這篇文章主要介紹了Laravel框架實(shí)現(xiàn)定時(shí)發(fā)布任務(wù)的方法,結(jié)合實(shí)例形式分析了使用Linux的cronTab功能實(shí)現(xiàn)定時(shí)發(fā)布任務(wù)的相關(guān)設(shè)置與操作技巧,需要的朋友可以參考下2018-08-08PHP實(shí)現(xiàn)新型冠狀病毒疫情實(shí)時(shí)圖的實(shí)例
在本篇文章小編給大家分享一篇關(guān)于PHP新型冠狀病毒肺炎疫情實(shí)時(shí)圖源碼內(nèi)容,有興趣的朋友們可以本地測試下。2020-02-02PHP網(wǎng)頁游戲?qū)W習(xí)之Xnova(ogame)源碼解讀(一)
這篇文章主要介紹了PHP網(wǎng)頁游戲Xnova(ogame)源碼解讀,需要的朋友可以參考下2014-06-06帝國CMS留言板回復(fù)后發(fā)送EMAIL通知客戶
這篇文章主要介紹了帝國CMS留言板回復(fù)后發(fā)送EMAIL通知客戶的方法和具體修改示例,有需要的小伙伴可以參考下。2015-07-07php實(shí)現(xiàn)斐波那契數(shù)列代碼分享
這篇文章主要介紹了php實(shí)現(xiàn)斐波那契數(shù)列代碼分享,具有一定借鑒價(jià)值,需要的朋友可以參考下。2017-12-12Yii實(shí)現(xiàn)的多級聯(lián)動(dòng)下拉菜單
這篇文章主要介紹了Yii實(shí)現(xiàn)的多級聯(lián)動(dòng)下拉菜單,包括視圖、模型及控制器的相關(guān)實(shí)現(xiàn)代碼,涉及基于Yii的數(shù)據(jù)庫查詢、數(shù)組遍歷與數(shù)據(jù)顯示等相關(guān)操作技巧,需要的朋友可以參考下2016-07-07phpstudy2020搭建站點(diǎn)的實(shí)現(xiàn)示例
這篇文章主要介紹了phpstudy2020搭建站點(diǎn)的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-10-10